import { z } from 'zod'

export const terminationChecklistSchema = z.object({
  employeeId: z.string().min(1, '请选择员工'),
  reason: z.enum(['NEGOTIATED', 'FAULT', 'NONFAULT', 'LAYOFF', 'EXPIRED']),
  terminationDate: z.string().datetime(),
  compensation: z.number().min(0).default(0),
  checklist: z.record(z.boolean()).default({}),
  remark: z.string().max(500).optional(),
})

export const terminationQuerySchema = z.object({
  page: z.coerce.number().min(1).default(1),
  pageSize: z.coerce.number().min(1).max(50).default(20),
})

export const resignationSchema = z.object({
  employeeId: z.string().min(1, '员工ID不能为空'),
  terminationDate: z.string().min(1, '离职日期不能为空'),
  resignationReason: z.string().max(200).optional(),
  remark: z.string().max(500).optional(),
})

export const batchTerminatePreviewSchema = z.object({
  items: z.array(z.object({
    employeeId: z.string().min(1),
    reason: z.string().min(1, '解聘原因不能为空'),
    terminationDate: z.string().min(1, '解聘日期不能为空'),
  })).min(1, '至少选择一名员工'),
})

export const batchTerminateSchema = z.object({
  items: z.array(z.object({
    employeeId: z.string().min(1),
    reason: z.string().min(1, '解聘原因不能为空'),
    terminationDate: z.string().min(1, '解聘日期不能为空'),
    compensation: z.number().min(0).optional(),
  })).min(1, '至少选择一名员工'),
})

export const createTerminationDraftSchema = z.object({
  employeeId: z.string().min(1, '员工ID不能为空'),
  type: z.enum(['TERMINATION', 'RESIGNATION']).optional(),
  reason: z.string().max(200).optional(),
  terminationDate: z.string().optional(),
  compensation: z.number().min(0).optional(),
  compensationBreakdown: z.any().optional(),
  handoverItems: z.array(z.any()).optional(),
  checklistOverrides: z.any().optional(),
  remark: z.string().max(500).optional(),
})

export const updateTerminationDraftSchema = z.object({
  reason: z.string().max(200).optional(),
  terminationDate: z.string().optional(),
  compensation: z.number().min(0).optional(),
  compensationBreakdown: z.any().optional(),
  handoverItems: z.array(z.any()).optional(),
  checklistOverrides: z.any().optional(),
  remark: z.string().max(500).optional(),
})
