import { z } from "zod";
import { electionPositionTypeSchema } from "@/lib/validation/election";

export const candidateStatusSchema = z.enum([
  "pending",
  "approved",
  "withdrawn",
]);

export const addPositionSchema = z.object({
  electionId: z.string().uuid(),
  title: z.string().trim().min(1).max(500),
  positionType: electionPositionTypeSchema.default("single_seat"),
  seatsAvailable: z.number().int().min(1).max(100).default(1),
});

export const addCandidateSchema = z.object({
  electionPositionId: z.string().uuid(),
  name: z.string().trim().min(1).max(255),
  biography: z.string().trim().max(20000).optional().nullable(),
  goalsStatement: z.string().trim().max(20000).optional().nullable(),
  conflictOfInterestDisclosure: z
    .string()
    .trim()
    .max(20000)
    .optional()
    .nullable(),
  photoUrl: z.string().max(512).optional().nullable(),
  resumeUrl: z.string().max(512).optional().nullable(),
});

export const candidateIdSchema = z.object({
  candidateId: z.string().uuid(),
});

export const upsertCandidateQASchema = z.object({
  candidateId: z.string().uuid(),
  qaId: z.string().uuid().optional(),
  question: z.string().trim().min(1).max(5000),
  answer: z.string().trim().min(1).max(20000),
});

export type AddPositionInput = z.infer<typeof addPositionSchema>;
export type AddCandidateInput = z.infer<typeof addCandidateSchema>;
export type UpsertCandidateQAInput = z.infer<typeof upsertCandidateQASchema>;
