// src/server/features/approval/approval.schema.ts
// Zod schemas for approval system validation

import { z } from 'zod';

// Типы сущностей для согласования
export const approvalEntityTypeEnum = z.enum(['shift', 'employee', 'blacklist', 'contractor']);

// Статусы заявок
export const approvalStatusEnum = z.enum(['pending', 'approved', 'rejected']);

// Схема для создания заявки на согласование
export const createApprovalRequestSchema = z.object({
  entityType: approvalEntityTypeEnum,
  targetId: z.string().uuid().nullable(), // ID изменяемой записи (null при создании новой)
  payload: z.record(z.string(), z.any()), // JSON с измененными полями
});

// Схема для обновления заявки
export const updateApprovalRequestSchema = z.object({
  payload: z.record(z.string(), z.any()), // JSON с измененными полями
});

// Схема для ответа с заявкой
export const approvalRequestResponseSchema = z.object({
  id: z.string().uuid(),
  entityType: approvalEntityTypeEnum,
  targetId: z.string().uuid().nullable(),
  requesterId: z.string().uuid(),
  payload: z.record(z.string(), z.any()),
  status: approvalStatusEnum,
  createdAt: z.string(),
  updatedAt: z.string(),
  archivedAt: z.string().nullable(),
});

// TypeScript типы
export type CreateApprovalRequestInput = z.infer<typeof createApprovalRequestSchema>;
export type UpdateApprovalRequestInput = z.infer<typeof updateApprovalRequestSchema>;
export type ApprovalRequestResponse = z.infer<typeof approvalRequestResponseSchema>;
