import { usePaginatedList } from '~/shared/composables/usePaginatedList'

/**
 * Vue MINIMALE du referentiel QUALIMAT embarque (groupe `qualimat:read`) dans la
 * LISTE des transporteurs. Seuls les champs consommes par le Repertoire sont
 * types : `validityDate` alimente la colonne « Date de validité » (fond rouge si
 * perimee — RG-4.04). L'id QUALIMAT est une chaine (colonne BIGINT cote back).
 */
export interface CarrierQualimat {
    id: string
    name: string | null
    /** Date ISO de validite de l'agrement QUALIMAT (date_immutable) — RG-4.04. */
    validityDate: string | null
    status: string | null
}

/**
 * Vue MINIMALE d'un transporteur pour le Repertoire (datatable). Volontairement
 * partielle : seuls les champs des colonnes + l'id (navigation) sont types ici.
 * Le detail complet (onglets Adresses / Contacts / Prix) est hors perimetre de
 * cet ecran (ERP-164, ticket #9).
 *
 * `certificationType` : QUALIMAT | GMP_PLUS | OVOCOM | COMPTE_PROPRE | AUTRE, ou
 * `null` dans le cas LIOT (compte-propre interne sans certification — RG-4.01).
 * Le libelle affiche est resolu cote front (cle i18n `transport.carriers.certification.*`).
 */
export interface Carrier {
    id: number
    name: string | null
    certificationType: string | null
    /** Lien editable vers le referentiel QUALIMAT (null si transporteur non QUALIMAT). */
    qualimatCarrier: CarrierQualimat | null
    /** Date ISO de derniere modification (default:read) — colonne « Dernière activité ». */
    updatedAt: string | null
    isArchived: boolean
}

/**
 * Filtres du Repertoire transporteurs, branches sur les query params de
 * `GET /api/carriers` (spec-back § 4.1). Pilotes par la page via `setFilters` :
 *  - `search` : recherche fuzzy sur le nom ;
 *  - `certificationType[]` : multi-valeurs (OR cote back) ;
 *  - `archivedOnly` : n'affiche QUE les archives (toggle « Voir les archivés »,
 *    aligne sur les autres repertoires M1/M2/M3).
 */
export interface CarrierFilters {
    search?: string
    'certificationType[]'?: string[]
    archivedOnly?: boolean
}

/**
 * Repertoire transporteurs (M4, ERP-164) — simple enveloppe de
 * `usePaginatedList<Carrier>` sur la ressource `/carriers` (regle ABSOLUE n°13 :
 * pagination serveur obligatoire ; jamais de chargement integral en memoire).
 * Miroir de `useSuppliersRepository` (M2) / `useProvidersRepository` (M3).
 *
 * Les filtres (recherche, certifications, archives) sont pilotes par la page via
 * `setFilters` du composable partage — la remise en page 1 est garantie. Par
 * defaut AUCUN `archivedOnly` n'est envoye : le back masque alors les archives
 * (§ 2.4). Cocher « Voir les archivés » envoie `archivedOnly=true` (seules les
 * archives sont listees, aligne sur Client / Fournisseur / Prestataire).
 *
 * Volontairement PAR INSTANCE (pas de singleton module-level) : l'etat tableau
 * est propre a l'ecran Repertoire et meurt avec lui, comme tout consommateur de
 * `usePaginatedList`. Aucun reset au logout a gerer.
 */
export function useCarriersRepository() {
    return usePaginatedList<Carrier, CarrierFilters>({ url: '/carriers' })
}
