import { z } from 'zod';

const announcementBaseSchema = z
  .object({
    title: z.string().trim().min(2, 'กรุณากรอกหัวข้อประกาศ'),
    content: z.string().trim().min(10, 'กรุณากรอกรายละเอียดประกาศ'),
    startDate: z.string().min(1, 'กรุณาเลือกวันเริ่มแสดง'),
    endDate: z.string().optional(),
    removeAttachment: z.boolean().optional()
  })
  .superRefine((value, context) => {
    const startDate = Date.parse(value.startDate);

    if (Number.isNaN(startDate)) {
      context.addIssue({
        code: z.ZodIssueCode.custom,
        path: ['startDate'],
        message: 'วันเริ่มแสดงไม่ถูกต้อง'
      });
    }

    if (value.endDate?.trim()) {
      const endDate = Date.parse(value.endDate);

      if (Number.isNaN(endDate)) {
        context.addIssue({
          code: z.ZodIssueCode.custom,
          path: ['endDate'],
          message: 'วันสิ้นสุดการแสดงไม่ถูกต้อง'
        });
        return;
      }

      if (!Number.isNaN(startDate) && endDate < startDate) {
        context.addIssue({
          code: z.ZodIssueCode.custom,
          path: ['endDate'],
          message: 'วันสิ้นสุดต้องไม่น้อยกว่าวันเริ่มแสดง'
        });
      }
    }
  });

export const announcementDraftActionSchema = z.enum(['draft', 'submit']);

export const announcementDraftSchema = announcementBaseSchema;
export const announcementSubmitSchema = announcementBaseSchema;

export function validateAnnouncementReadyForReview(values: AnnouncementFormValues) {
  const parsed = announcementSubmitSchema.safeParse(values);

  if (!parsed.success) {
    throw parsed.error;
  }
}

export type AnnouncementDraftAction = z.infer<typeof announcementDraftActionSchema>;
export type AnnouncementFormValues = z.infer<typeof announcementDraftSchema>;
