// Vertaalt een dossier naar de {{parameter}}-vocabulaire van de modelbrieven
// (data/modelbrieven), zodat een modelmail vanuit een dossier al een aantal
// gekende gegevens voorgevuld krijgt. Blijft, net als lib/dossier/parameters.ts,
// bewust conservatief: enkel velden invullen die met zekerheid gekend zijn.

import type { Dossier, Partij } from "./types";
import { berekenOntbrekendeStukken, stukLabel } from "./afleiding";
import { euro } from "@/lib/format";
import { KANTOOR, type Kantoor } from "@/data/kantoor";

function volledigeNaam(partij: Partij): string {
  return [partij.voornaam, partij.naam].filter(Boolean).join(" ").trim();
}

export function dossierNaarModelbriefWaarden(
  dossier: Dossier,
  kantoor: Kantoor = KANTOOR
): Record<string, string> {
  const waarden: Record<string, string> = {};
  if (kantoor.standplaats) {
    waarden.standplaats = kantoor.standplaats;
    waarden.plaats_ondertekening = kantoor.standplaats;
  }
  if (kantoor.standaardNotaris) waarden.naam_notaris = kantoor.standaardNotaris;
  if (dossier.referentie) waarden.referte = dossier.referentie;
  const partijen = dossier.partijen.waarde;
  const verkopers = partijen.filter((p) => p.rol === "verkoper");
  const kopers = partijen.filter((p) => p.rol === "koper");

  const verkopersNamen = verkopers.map(volledigeNaam).filter(Boolean).join(", ");
  const kopersNamen = kopers.map(volledigeNaam).filter(Boolean).join(", ");
  if (verkopersNamen) waarden.naam_verkoper = verkopersNamen;
  if (kopersNamen) waarden.naam_koper = kopersNamen;
  if (partijen.length === 1) waarden.naam = volledigeNaam(partijen[0]);

  // Het adres van het goed wordt door de verkoopbrieven als {{adres}} gebruikt
  // en is ondubbelzinnig uit het dossier af te leiden.
  const adres = dossier.goed?.waarde.adres?.trim();
  if (adres) waarden.adres = adres;

  if (dossier.prijs && dossier.prijs.waarde > 0) waarden.verkoopprijs = euro(dossier.prijs.waarde);

  const ontbrekend = berekenOntbrekendeStukken(dossier);
  if (ontbrekend.length > 0) {
    waarden.op_te_vragen_stukken = ontbrekend.map((id) => `- ${stukLabel(id)}`).join("\n");
  }

  return waarden;
}
