/**
 * Helpers purs de l'onglet Adresse prestataire (M3 Technique, ERP-143) — miroir
 * SIMPLIFIE de `supplierFormRules`/`supplierEdit` (M2), reimplemente cote module
 * Technique (regle ABSOLUE n°1 : pas d'import inter-module). Testables sans Vue.
 */

import type { ProviderAddressFormDraft } from '~/modules/technique/types/providerForm'

/**
 * Champs scalaires obligatoires non nullable cote back (NotBlank). A la creation
 * (POST), on OMET du payload ceux qui sont vides pour que la 422 porte la
 * violation NotBlank propre (sur le champ) plutot qu'une erreur de type.
 */
const REQUIRED_NON_NULLABLE_KEYS = ['postalCode', 'city', 'street'] as const

/**
 * RG-3.05 (+ RG-3.09) : une adresse est « valide » pour autoriser l'ajout d'un
 * nouveau bloc des qu'elle porte au moins un site ET au moins une categorie. Les
 * scalaires (CP/ville/rue) restent valides par le back (422 inline).
 */
export function isProviderAddressValid(address: ProviderAddressFormDraft): boolean {
    return address.siteIris.length >= 1 && address.categoryIris.length >= 1
}

/**
 * Payload de la sous-ressource addresses (groupe `provider:write:addresses`).
 * Relations M2M en IRI. Les scalaires requis vides sont omis a la creation (cf.
 * REQUIRED_NON_NULLABLE_KEYS).
 */
export function buildProviderAddressPayload(address: ProviderAddressFormDraft): Record<string, unknown> {
    const payload: Record<string, unknown> = {
        country: address.country,
        postalCode: address.postalCode || null,
        city: address.city || null,
        street: address.street || null,
        streetComplement: address.streetComplement || null,
        categories: [...address.categoryIris],
        sites: [...address.siteIris],
        contacts: [...address.contactIris],
    }

    for (const key of REQUIRED_NON_NULLABLE_KEYS) {
        const value = payload[key]
        if (value === null || value === undefined || value === '') {
            delete payload[key]
        }
    }

    return payload
}
