import { z } from "zod";
import { nigerianPhoneRegex } from "./profile.schema";
import { verifiedEmailSchema } from "./email";

export const createAgencySchema = z.object({
  name: z.string().min(2, "Agency name must be at least 2 characters").max(200),
  cacRcNumber: z
    .string()
    .trim()
    .min(3, "CAC / RC number is required for verification")
    .max(50)
    .optional()
    .nullable(),
  taxIdNumber: z.string().trim().max(50).optional().nullable(),
  email: verifiedEmailSchema,
  phone: z
    .string()
    .trim()
    .refine(
      (val) => !val || nigerianPhoneRegex.test(val.replace(/\s+/g, "")),
      "Invalid Nigerian phone number"
    )
    .optional()
    .nullable(),
  whatsappNumber: z
    .string()
    .trim()
    .refine(
      (val) => !val || nigerianPhoneRegex.test(val.replace(/\s+/g, "")),
      "Invalid WhatsApp number"
    )
    .optional()
    .nullable(),
  description: z.string().max(1000).optional().nullable(),
  officeAddress: z.string().max(300).optional().nullable(),
  stateId: z.number().int().positive().optional().nullable(),
  lgaId: z.number().int().positive().optional().nullable(),
  logoUrl: z.string().url().optional().nullable(),
  coverImageUrl: z.string().url().optional().nullable(),
});

export const updateAgencySchema = createAgencySchema.partial();

export const inviteAgentSchema = z.object({
  agencyId: z.string().uuid("Invalid agency ID"),
  email: verifiedEmailSchema,
  role: z.enum(["ADMIN", "AGENT", "COORDINATOR"]).default("AGENT"),
});

export type CreateAgencyInput = z.infer<typeof createAgencySchema>;
export type UpdateAgencyInput = z.infer<typeof updateAgencySchema>;
export type InviteAgentInput = z.infer<typeof inviteAgentSchema>;
