/**
 * Types « brouillon » de l'ecran « Ajouter un client » (M1 Commercial).
 *
 * 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 et les blocs reutilisables
 * `ClientContactBlock` / `ClientAddressBlock` (reutilises par 1.11/1.12).
 */

/** Un contact du client (onglet Contact). */
export interface ContactFormDraft {
    /** 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 client (onglet Adresse). */
export interface AddressFormDraft {
    id: number | null
    isProspect: boolean
    isDelivery: boolean
    isBilling: boolean
    /** Adresse Courtier — type autonome exclusif. */
    isBroker: boolean
    /** Adresse Distributeur — type autonome exclusif. */
    isDistributor: boolean
    country: string
    postalCode: string | null
    city: string | null
    street: string | null
    streetComplement: string | null
    /** IRI des categories rattachees (hors DISTRIBUTEUR/COURTIER — RG-1.29). */
    categoryIris: string[]
    /** IRI des sites Starseed rattaches (>= 1 obligatoire — RG-1.10). */
    siteIris: string[]
    /** IRI des contacts rattaches (= blocs Contact deja crees). */
    contactIris: string[]
    /** Email de facturation (obligatoire si isBilling — RG-1.11). */
    billingEmail: string | null
    /** 2e email de facturation, optionnel (max 2 — pendant du telephone secondaire). */
    billingEmailSecondary: string | null
    /** Drapeau UI : 2e champ email revele (comme hasSecondaryPhone). */
    hasSecondaryBillingEmail: boolean
}

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

/** Fabrique un contact vierge. */
export function emptyContact(): ContactFormDraft {
    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 »). */
export function emptyAddress(): AddressFormDraft {
    return {
        id: null,
        isProspect: false,
        isDelivery: false,
        isBilling: false,
        isBroker: false,
        isDistributor: false,
        country: 'France',
        postalCode: null,
        city: null,
        street: null,
        streetComplement: null,
        categoryIris: [],
        siteIris: [],
        contactIris: [],
        billingEmail: null,
        billingEmailSecondary: null,
        hasSecondaryBillingEmail: false,
    }
}

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