import vine from '@vinejs/vine'

const INVOICE_STATUSES = [
  'pending',
  'awaiting_user_confirmation',
  'in_relance',
  'paid',
  'litigation',
  'cancelled',
] as const

/**
 * Filtres GET /invoices?status=&q=&clientId=&page=
 */
export const listInvoicesValidator = vine.create({
  status: vine.enum([...INVOICE_STATUSES, 'all'] as const).optional(),
  q: vine.string().maxLength(120).optional(),
  clientId: vine.string().uuid().optional(),
  page: vine.number().min(1).optional(),
})

/**
 * POST /invoices — saisie manuelle.
 *
 * Le SPA peut envoyer :
 *  - clientId d'un client existant (combobox a sélectionné une fiche), OU
 *  - clientName seul → on tente de matcher par nom, sinon création à la
 *    volée mais alors clientEmail est REQUIS (pivot produit, cf. Client).
 *
 * On ne peut pas exprimer "email requis si pas de match" en Vine pur, donc
 * c'est le contrôleur qui retourne 422 `client_email_required` si besoin.
 */
export const createInvoiceValidator = vine.create({
  clientId: vine.string().uuid().optional(),
  clientName: vine.string().minLength(2).maxLength(120),
  clientEmail: vine.string().email().nullable().optional(),
  numero: vine.string().minLength(1).maxLength(50),
  amountTtcCents: vine.number().min(1),
  issueDate: vine.string().regex(/^\d{4}-\d{2}-\d{2}T/),
  dueDate: vine.string().regex(/^\d{4}-\d{2}-\d{2}T/),
  planId: vine.string().uuid().nullable().optional(),
})
