/**
 * Types « brouillon » de l'ecran « Ajouter un fournisseur » (M2 Commercial).
 *
 * Miroir de `types/clientForm.ts` (M1). Ces interfaces decrivent l'etat LOCAL du
 * formulaire (refs Vue), distinct des DTO de l'API : elles portent en plus des
 * champs purement UI (`hasSecondaryPhone`) et l'`iri` Hydra des entites creees
 * (necessaire pour rattacher une adresse a des contacts deja persistes, M2M).
 * Partage par la page de creation et les blocs `SupplierContactBlock` /
 * `SupplierAddressBlock` (reutilises par la consultation/modification 95/96).
 *
 * Differences M2 vs M1 (cf. spec-front § « Differences notables ») :
 *  - Adresse : type via enum exclusif `addressType` (PROSPECT/DEPART/RENDU,
 *    RG-2.09) — pas de drapeaux isProspect/isDelivery/isBilling.
 *  - Adresse : champs specifiques fournisseur `bennes` (nombre) et
 *    `triageProvider` (prestation de triage). Pas d'email de facturation.
 *  - Pas de relation Distributeur/Courtier ni de triage sur le bloc principal.
 */

/** Type d'adresse fournisseur (enum exclusif RG-2.09). */
export type SupplierAddressType = 'PROSPECT' | 'DEPART' | 'RENDU'

/** Un contact du fournisseur (onglet Contacts). */
export interface SupplierContactFormDraft {
    /** Id serveur une fois le contact cree (null tant que non persiste). */
    id: number | null
    /** IRI Hydra du contact cree — utilise pour le rattachement M2M cote adresse. */
    iri: string | null
    firstName: string | null
    lastName: string | null
    jobTitle: string | null
    phonePrimary: string | null
    phoneSecondary: string | null
    email: string | null
    /** UI : le 2e numero a ete revele via le bouton « + ». */
    hasSecondaryPhone: boolean
}

/** Une adresse du fournisseur (onglet Adresses). */
export interface SupplierAddressFormDraft {
    id: number | null
    /** Type exclusif Prospect / Depart / Rendu (RG-2.09). null tant que non choisi. */
    addressType: SupplierAddressType | null
    country: string
    postalCode: string | null
    city: string | null
    street: string | null
    streetComplement: string | null
    /** IRI des categories rattachees (type FOURNISSEUR, RG-2.10). */
    categoryIris: string[]
    /** IRI des sites Starseed rattaches (>= 1 obligatoire — RG-2.06). */
    siteIris: string[]
    /** IRI des contacts rattaches (= blocs Contact deja crees). */
    contactIris: string[]
    /** Nombre de bennes (stepper, defaut 0). Chaine pour MalioInputNumber, convertie au payload. */
    bennes: string | null
    /** Prestation de triage (specifique fournisseur, portee par l'adresse — RG). */
    triageProvider: boolean
}

/** Un RIB du fournisseur (onglet Comptabilite). */
export interface SupplierRibFormDraft {
    id: number | null
    label: string | null
    bic: string | null
    iban: string | null
}

/** Fabrique un contact vierge. */
export function emptyContact(): SupplierContactFormDraft {
    return {
        id: null,
        iri: null,
        firstName: null,
        lastName: null,
        jobTitle: null,
        phonePrimary: null,
        phoneSecondary: null,
        email: null,
        hasSecondaryPhone: false,
    }
}

/** Fabrique une adresse vierge (pays prerempli « France », 0 benne). */
export function emptyAddress(): SupplierAddressFormDraft {
    return {
        id: null,
        addressType: null,
        country: 'France',
        postalCode: null,
        city: null,
        street: null,
        streetComplement: null,
        categoryIris: [],
        siteIris: [],
        contactIris: [],
        bennes: '0',
        triageProvider: false,
    }
}

/** Fabrique un RIB vierge. */
export function emptyRib(): SupplierRibFormDraft {
    return {
        id: null,
        label: null,
        bic: null,
        iban: null,
    }
}
