import type { Modelonderdeel, Taal } from "./types";

// ── NL/FR-tegenhanger voor onderdelen ────────────────────────────────────────
// Analoog aan lib/modeldocumenten/taalkeuze.ts (dat voor Modeldocument werkt):
// bidirectionele lookup via `vertalingVanId`, ongeacht welke kant (NL of FR)
// het veld draagt — de conventie legt dat nooit in beide richtingen tegelijk
// vast (zie data/modeldocumenten/pariteit.ts, dat enkel de FR→NL richting leest).

function taalVan(o: Modelonderdeel): Taal {
  return o.taal === "fr" ? "fr" : "nl";
}

/**
 * Zoekt het anderstalige tegenhanger-onderdeel (NL ↔ FR) van `onderdeel` in
 * `alleOnderdelen`, ongeacht of `vertalingVanId` op het NL- of het FR-item
 * staat. Geeft `undefined` als er (nog) geen vertaling in de bibliotheek zit.
 */
export function vindOnderdeelTegenhanger(
  onderdeel: Modelonderdeel,
  alleOnderdelen: Modelonderdeel[]
): Modelonderdeel | undefined {
  const doelTaal: Taal = taalVan(onderdeel) === "fr" ? "nl" : "fr";
  const zelfde = (id: string | undefined) => !!id && (id === onderdeel.id || id === onderdeel.vertalingVanId);
  return alleOnderdelen.find(
    (o) =>
      o.id !== onderdeel.id &&
      taalVan(o) === doelTaal &&
      (o.vertalingVanId === onderdeel.id || zelfde(o.vertalingVanId) || zelfde(o.id))
  );
}
