import { z } from "zod";
import { onlineLessonCategoryValues } from "../constants/categories";

const videoUrlSchema = z
  .string()
  .trim()
  .optional()
  .refine((value) => !value || /^https?:\/\//i.test(value), {
    message: "URL วิดีโอไม่ถูกต้อง",
  });

export const onlineLessonDraftActionSchema = z.enum(["draft", "submit"]);

export const onlineLessonDraftSchema = z.object({
  title: z.string().trim().min(1, "กรุณากรอกชื่อบทเรียน"),
  description: z.string().optional(),
  category: z.enum(onlineLessonCategoryValues, {
    message: "กรุณาเลือกหมวดหมู่",
  }),
  videoUrl: videoUrlSchema,
});

export const onlineLessonSubmitSchema = onlineLessonDraftSchema.extend({
  description: z.string().trim().min(1, "กรุณากรอกรายละเอียดบทเรียน"),
  category: z.enum(onlineLessonCategoryValues, {
    message: "กรุณาเลือกหมวดหมู่",
  }),
});

export function validateOnlineLessonReadyForReview({
  values,
  hasThumbnailSource,
}: {
  values: OnlineLessonFormValues;
  hasThumbnailSource: boolean;
}) {
  const parsed = onlineLessonSubmitSchema.safeParse(values);

  if (!parsed.success) {
    throw new Error(
      parsed.error.issues[0]?.message ?? "ข้อมูลบทเรียนออนไลน์ไม่ถูกต้อง",
    );
  }

  if (!hasThumbnailSource) {
    throw new Error("กรุณาอัปโหลดรูปปกบทเรียนก่อนส่งตรวจสอบ");
  }
}

export type OnlineLessonDraftAction = z.infer<
  typeof onlineLessonDraftActionSchema
>;
export type OnlineLessonFormValues = z.infer<typeof onlineLessonDraftSchema>;
