/**
 * Interface OCR — abstraction switchable (cf. backend.md §11.1).
 *
 * Implémentations :
 *  - MockOcrProvider : retour plausible depuis le filename, pour les démos
 *    et le dev sans Mistral. C'est le default en V1 (OCR_PROVIDER=mock).
 *  - MistralOcrProvider : à venir (ADR-020), appel API Mistral avec PDF
 *    téléchargé depuis MinIO.
 */
export interface OcrProvider {
  extract(input: { storageKey: string | null; filename: string }): Promise<OcrResult>
}

export type OcrFieldName =
  | 'clientName'
  | 'clientEmail'
  | 'numero'
  | 'amountTtcCents'
  | 'issueDate'
  | 'dueDate'

export type OcrResult = {
  fields: {
    clientName: { value: string; confidence: number }
    clientEmail: { value: string | null; confidence: number }
    numero: { value: string; confidence: number }
    amountTtcCents: { value: number; confidence: number }
    issueDate: { value: string; confidence: number } // ISO 8601
    dueDate: { value: string; confidence: number }
  }
  /** Trace brute du provider — utile pour debug / re-process / audit. */
  rawProviderResponse?: unknown
}
