// ── Parameter-register: canonieke namen en aliassen ──────────────────────────
// Parameternamen zijn per conventie GEDEELD over de hele bibliotheek en over
// de talen heen: dezelfde {{naam_koper}} in compromis, akte en FR-spiegel,
// zodat één dossierwaardenset beide taalversies vult (zie
// richtlijnen.ts → gedeeldeParameternamen). Historisch groeiden er toch
// synoniemen (notaris_naam naast naam_notaris) en Franse namen in
// FR-clausules (prix_chiffres naast prijs_cijfers). Die zijn bij de
// parameterharmonisatie (2026-07-11) in de seeds hernoemd naar de canonieke
// naam; dit register bewaart de oude namen als ALIAS zodat:
//
//   1. externe agenten die de oude naam nog aanleveren (of eigen
//      IndexedDB-clausules die ze nog gebruiken) gewoon blijven werken —
//      `vulParametersIn` lost elke aangeleverde waarde via dit register op;
//   2. de audit (`bibliotheek-audit.ts`) een heringevoerde aliasnaam in een
//      nieuwe clausule hard kan afkeuren — nieuwe clausules gebruiken de
//      canonieke naam.
//
// Nieuwe clausule toevoegen? Gebruik bestaande canonieke namen (zie de
// NL-spiegelclausule of de parameter-catalogus) en voeg NOOIT een nieuwe
// alias toe; dit register groeit enkel bij een bewuste hernoemingsronde.

/** Alias (oude/afwijkende naam) → canonieke parameternaam. */
export const PARAMETER_ALIASSEN: Record<string, string> = {
  "adresse_bien": "adres_onroerend_goed",
  "bureau_securite_juridique_numero_et_commune": "kantoor_rechtszekerheid_met_nummer_en_gemeente",
  "ce_bien_ces_biens": "dit_goed_deze_goederen",
  "commune": "gemeente",
  "commune_geometre_plan": "gemeente_landmeter_plan",
  "compte_acquereur": "rekening_koper",
  "couleur_ou_lisere_plan": "kleur_of_omlijning_op_plan",
  "couleur_ou_liser\u00e9_plan": "kleur_of_omlijning_op_plan",
  "date_acte_de_base": "datum_basisakte",
  "date_acte_de_base_modificatif": "datum_wijzigende_basisakte",
  "date_certibeau": "datum_certibeau",
  "date_controle_citerne": "datum_keuring_tank",
  "date_epc": "datum_epc",
  "date_peb": "datum_peb",
  "date_permis_lotissement": "datum_verkavelingsvergunning",
  "date_plan": "datum_plan",
  "date_renseignements_nature": "datum_natuurinlichtingen",
  "date_statuts": "datum_statuten",
  "date_transcription_acte_de_base": "datum_overschrijving_basisakte",
  "date_transcription_acte_de_base_modificatif": "datum_overschrijving_wijzigende_basisakte",
  "denomination_lot_plan": "benaming_lot_op_plan",
  "description_association_partielle_ou_parties_speciales": "beschrijving_deelvereniging_of_bijzondere_delen",
  "description_deuxieme_etage": "beschrijving_tweede_verdieping",
  "description_division": "afdeling_omschrijving",
  "description_introductive_immeuble_ou_parcelle": "inleidende_omschrijving_gebouw_of_perceel",
  "description_lot_privatif": "beschrijving_privatieve_kavel",
  "description_panneaux_photovoltaiques": "beschrijving_zonnepanelen",
  "description_partie_complementaire": "omschrijving_bijkomend_deel",
  "description_parties_privatives": "beschrijving_privatieve_delen",
  "description_premier_etage": "beschrijving_eerste_verdieping",
  "description_quatrieme_etage": "beschrijving_vierde_verdieping",
  "description_troisieme_etage": "beschrijving_derde_verdieping",
  "description_usage_exclusif": "beschrijving_exclusief_gebruik",
  "emplacement_dans_immeuble": "plaats_in_het_gebouw",
  "est_decrit_sont_decrits": "staat_staan",
  "etage": "verdieping",
  "identification_parcellaire_par_bien": "perceelsidentificatienummer_per_goed",
  "identification_parcellaire_reservee_par_bien": "gereserveerd_perceelsidentificatienummer_per_goed",
  "identite_acquereurs": "identiteit_kopers",
  "identite_vendeurs": "identiteit_verkopers",
  "jardin_terrasse_balcon_ou_autre_bien_jouissance_exclusive": "tuin_terras_balkon_of_ander_goed_in_exclusief_genot",
  "lieu_notaire_acte_de_base": "plaats_notaris_basisakte",
  "lieu_notaire_acte_de_base_modificatif": "plaats_notaris_wijzigende_basisakte",
  "montant_garantie": "bedrag_waarborg",
  "montant_garantie_lettres": "bedrag_waarborg_voluit",
  "nature_du_lot": "type_goed",
  "nom_commune": "gemeente_naam",
  "nom_compte_acquereur": "naam_koper_rekening",
  "nom_geometre_plan": "naam_landmeter_plan",
  "nom_syndic": "naam_syndicus",
  "notaire_acquereur": "notaris_koper",
  "notaire_acte_de_base": "notaris_basisakte",
  "notaire_acte_de_base_modificatif": "notaris_wijzigende_basisakte",
  "notaire_vendeur": "notaris_verkoper",
  "notaris_naam": "naam_notaris",
  "notaris_standplaats": "standplaats_notaris",
  "numero_appartement": "nummer_appartement",
  "numero_cadastral_empietement": "perceelnummer_overbouw",
  "numero_cadastral_extrait_recent": "perceelnummer_recent_kadaster",
  "numero_cadastral_titre": "perceelnummer_titel",
  "numero_deuxieme_etage": "nummer_tweede_verdieping",
  "numero_divergent_cadastre": "afwijkend_huisnummer",
  "numero_formalite_ou_volume_et_registre_acte_de_base": "formaliteitnummer_of_volumenummer_en_boeknummer_basisakte",
  "numero_formalite_ou_volume_et_registre_acte_de_base_modificatif": "formaliteitnummer_of_volumenummer_en_boeknummer_wijzigende_basisakte",
  "numero_lot": "nummer_lot",
  "numero_lotissement": "nummer_verkaveling",
  "numero_peb": "nummer_peb",
  "numero_premier_etage": "nummer_eerste_verdieping",
  "numero_quatrieme_etage": "nummer_vierde_verdieping",
  "numero_troisieme_etage": "nummer_derde_verdieping",
  "pachter_naam": "naam_pachter",
  "prix_chiffres": "prijs_cijfers",
  "prix_lettres": "prijs_voluit",
  "quote_part_parties_communes": "aandeel_gemene_delen",
  "quote_part_parties_communes_generales": "aandeel_algemene_gemene_delen",
  "quote_part_parties_communes_speciales": "aandeel_bijzondere_gemene_delen",
  "rc_appartement": "ki_appartement",
  "rc_appartement_lettres": "ki_appartement_woorden",
  "rc_cave": "ki_berging",
  "rc_cave_lettres": "ki_berging_woorden",
  "rc_emplacement_parking": "ki_autostaanplaats",
  "rc_emplacement_parking_lettres": "ki_autostaanplaats_woorden",
  "rc_partie_complementaire": "ki_bijkomend_deel",
  "rc_partie_complementaire_lettres": "ki_bijkomend_deel_woorden",
  "rc_total": "ki_samen",
  "rc_total_global": "totaal_ki",
  "rc_total_global_lettres": "totaal_ki_woorden",
  "rc_total_lettres": "ki_samen_woorden",
  "reference_appartement": "referentie_appartement",
  "reference_plan_banque_de_donnees": "referte_plan_opname_databank_met_twee_maal_vijf_cijfers",
  "referentie_vergunning": "referte_vergunning",
  "rooilijn_omschrijving": "omschrijving_rooilijn",
  "section_administrative": "deelgemeente",
  "section_extrait_recent": "sectie_recent_kadaster",
  "section_titre": "sectie_titel",
  "solde_prix": "saldo_prijs",
  "solde_prix_lettres": "saldo_prijs_voluit",
  "superficie_extrait_recent_mention": "oppervlakte_recent_kadaster_vermelding",
  "superficie_titre": "oppervlakte_titel",
  "usage_ou_jouissance": "gebruik_of_genot",
  "zone_destination": "bestemmingszone",
  "zone_pfas": "pfas_zone",};

/** De canonieke naam van een parameter (identiteit voor niet-aliassen). */
export function canoniekeParameterNaam(naam: string): string {
  return PARAMETER_ALIASSEN[naam] ?? naam;
}

/**
 * Herleidt aangeleverde invulwaarden naar canonieke sleutels: een waarde die
 * onder een aliasnaam binnenkomt, vult ook de canonieke placeholder (en
 * omgekeerd — de opzoeking in `vulParametersIn` gebeurt op de canonieke
 * naam). Bij conflict wint de expliciet canonieke sleutel.
 */
export function normaliseerParameterWaarden(
  waarden: Record<string, string>
): Record<string, string> {
  const genormaliseerd: Record<string, string> = {};
  for (const [sleutel, waarde] of Object.entries(waarden)) {
    const canoniek = canoniekeParameterNaam(sleutel);
    if (canoniek === sleutel || !(canoniek in waarden)) genormaliseerd[canoniek] = waarde;
  }
  return genormaliseerd;
}
