import { z } from "zod";

export const AgentKycSubmissionSchema = z.object({
  fullName: z.string().min(3, "Full legal name is required (min 3 characters)"),
  phoneNumber: z.string().min(10, "Valid phone number is required"),
  ninNumber: z
    .string()
    .min(11, "National Identity Number (NIN) must be 11 digits")
    .max(11, "National Identity Number (NIN) must be 11 digits")
    .regex(/^\d{11}$/, "NIN must contain only numbers"),
  idType: z.enum(["NIN_SLIP", "DRIVERS_LICENSE", "INTL_PASSPORT", "VOTERS_CARD"]),
  idDocumentUrl: z.string().min(1, "Government Photo ID document upload is required"),
  professionalBody: z.enum(["LASRERA", "ERCAAN", "NIESV", "REDAN", "CAC_BN", "OTHER"]),
  registrationNumber: z.string().min(3, "Accreditation / Registration license number is required"),
  membershipDocumentUrl: z.string().optional().nullable(),
  proofOfAddressUrl: z.string().optional().nullable(),
  passportPhotoUrl: z.string().optional().nullable(),
  officeAddress: z.string().min(5, "Physical office / business address is required"),
  stateId: z.coerce.number().optional().nullable(),
  city: z.string().min(2, "Operating city is required"),
  yearsOfExperience: z.coerce.number().min(0).max(50).optional().default(1),
  specialization: z.string().optional().nullable(),
  intendedPlanId: z.string().optional(),
  intendedBillingInterval: z.enum(["MONTHLY", "ANNUAL", "QUARTERLY", "BI_ANNUAL"]).optional(),
});

export type AgentKycSubmissionInput = z.infer<typeof AgentKycSubmissionSchema>;

export const ReviewAgentKycSchema = z.object({
  verificationId: z.string().uuid("Invalid verification ID"),
  decision: z.enum(["APPROVE", "REQUEST_CHANGES", "REJECT"]),
  rejectionReason: z.string().optional().nullable(),
  actionRequiredReason: z.string().optional().nullable(),
  actionRequiredField: z.string().optional().nullable(),
});

export type ReviewAgentKycInput = z.infer<typeof ReviewAgentKycSchema>;

export const ResubmitKycDocumentSchema = z.object({
  verificationId: z.string().uuid("Invalid verification ID"),
  fieldName: z.string().min(1, "Field name is required"),
  documentUrl: z.string().url("Valid document URL is required"),
  notes: z.string().optional().nullable(),
});

export type ResubmitKycDocumentInput = z.infer<typeof ResubmitKycDocumentSchema>;
