import * as z from 'zod';

export const trainingPolicySchema = z
  .object({
    year: z.number().int().min(2000, 'กรุณากรอกปีนโยบาย').max(2100, 'กรุณากรอกปีให้ถูกต้อง'),
    totalHours: z.number().positive('กรุณากรอกชั่วโมงรวม'),
    kHours: z.number().min(0, 'กรุณากรอกชั่วโมง K'),
    sHours: z.number().min(0, 'กรุณากรอกชั่วโมง S'),
    aHours: z.number().min(0, 'กรุณากรอกชั่วโมง A'),
    isActive: z.boolean()
  })
  .superRefine((value, ctx) => {
    const categoryTotal = value.kHours + value.sHours + value.aHours;

    if (Math.abs(categoryTotal - value.totalHours) > 0.001) {
      ctx.addIssue({
        code: z.ZodIssueCode.custom,
        path: ['totalHours'],
        message: 'ผลรวมชั่วโมง K + S + A ต้องเท่ากับชั่วโมงรวม'
      });
    }
  });

export const trainingPolicyFilterSchema = z.object({
  page: z.coerce.number().int().positive().optional(),
  limit: z.coerce.number().int().positive().optional(),
  search: z.string().trim().optional(),
  status: z.string().trim().optional(),
  sort: z.string().trim().optional()
});

export type TrainingPolicyFormValues = z.infer<typeof trainingPolicySchema>;
