import { z } from "zod"

const dateInput = z
  .union([z.string(), z.date(), z.null(), z.undefined()])
  .transform((val) => {
    if (val === null || val === undefined || val === "") return undefined
    if (val instanceof Date) return val
    const d = new Date(val)
    return Number.isNaN(d.getTime()) ? undefined : d
  })

export const leaveRequestSchema = z.object({
  id: z.string().optional(),
  employeeId: z.string().min(1, "Employee is required"),
  leaveTypeId: z.string().min(1, "Leave type is required"),
  startDate: dateInput.refine((val) => val !== undefined, {
    message: "Start date is required",
  }),
  endDate: dateInput.refine((val) => val !== undefined, {
    message: "End date is required",
  }),
  reason: z.string().optional(),
})

export const leaveRequestActionSchema = z.object({
  action: z.enum(["approve", "reject"]),
  reason: z.string().optional(),
})

export type LeaveRequestInput = z.infer<typeof leaveRequestSchema>
export type LeaveRequestActionInput = z.infer<typeof leaveRequestActionSchema>
