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

/**
 * Site Starseed rattache a une adresse du client, tel qu'embarque en LISTE
 * (groupe site:read) pour la colonne « Site(s) » du Repertoire (badges colores).
 */
export interface ClientSite {
    id: number
    name: string
    color: string
}

/**
 * Categorie rattachee au client, embarquee en LISTE (groupe category:read).
 * Seul le `code` (stable, MAJUSCULE — ERP-78) est affiche dans la colonne
 * « Catégories ». Les autres champs sont presents mais non utilises ici.
 */
export interface ClientCategory {
    code: string
    name?: string
}

/**
 * Vue MINIMALE d'un client pour le Repertoire (datatable). Volontairement
 * partielle : seuls les champs des colonnes + l'id (navigation) sont types ici.
 * Le detail complet (onglets) est hors perimetre de cet ecran (ERP-62).
 */
export interface Client {
    id: number
    companyName: string
    categories: ClientCategory[]
    sites: ClientSite[]
    /** Date ISO de derniere modification (default:read) — colonne « Dernière activité ». */
    updatedAt: string | null
    isArchived: boolean
}

/**
 * Repertoire clients (ERP-62) — simple enveloppe de `usePaginatedList<Client>`
 * sur la ressource `/clients` (RG-13 : pagination serveur obligatoire ; jamais
 * de chargement integral en memoire).
 *
 * Les filtres (recherche, categories, sites, archives) sont pilotes par la page
 * via `setFilters` du composable partage — la remise en page 1 est garantie.
 *
 * 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` (cf. sites.vue / categories.vue). Aucun reset au logout a
 * gerer.
 */
export function useClientsRepository() {
    return usePaginatedList<Client>({ url: '/clients' })
}
