import type { Locale } from "./config";

// Echte, verifizierbare Zahlenformat-Unterschiede pro Sprache/Land (nicht nur übersetzter Text):
// - Deutschland (de-DE): Komma als Dezimaltrennzeichen  → "28,50 €"
// - Schweiz (de-CH): Punkt als Dezimaltrennzeichen, Apostroph bei Tausendern → "28.50 €" / "1'234.50 €"
//   (die Schweiz nutzt den Punkt sogar innerhalb deutschsprachiger Texte — ein bekanntes,
//   authentisches Detail, das über reine Wortwahl hinausgeht)
// - England/UK (en-GB): Punkt als Dezimaltrennzeichen, Symbol vor der Zahl → "€28.50"
// - Frankreich (fr-FR): Komma als Dezimaltrennzeichen, geschütztes Leerzeichen vor dem Symbol
//
// Van's DIY & Bastelbedarf bleibt als deutsches Kleinunternehmen rechtlich bei EUR-Preisen
// (keine erfundene CHF-Umrechnung) — nur die Schreibweise der Zahl selbst passt sich der
// jeweiligen Sprachregion an.

const formatters: Record<Locale, Intl.NumberFormat> = {
  de: new Intl.NumberFormat("de-DE", { minimumFractionDigits: 2, maximumFractionDigits: 2 }),
  en: new Intl.NumberFormat("en-GB", { minimumFractionDigits: 2, maximumFractionDigits: 2 }),
  ch: new Intl.NumberFormat("de-CH", { minimumFractionDigits: 2, maximumFractionDigits: 2 }),
  fr: new Intl.NumberFormat("fr-FR", { minimumFractionDigits: 2, maximumFractionDigits: 2 }),
};

export function formatPrice(value: number, locale: Locale = "de"): string {
  const num = (formatters[locale] ?? formatters.de).format(value);
  return locale === "en" ? `€${num}` : `${num} €`;
}
