// i18n.jsx — Mehrsprachige Texte (Deutsch + Französisch).
//
// Alle Texte der Hochzeitsseite liegen hier zentral. Wenn ihr einen Text
// ändern wollt, sucht den Schlüssel (z. B. "rsvp.yesTitle") und passt
// beide Sprachvarianten an. Verwendung in den Komponenten:
//
//   const t = useT();
//   <h1>{t("login.title")}</h1>
//   <p>{t("rsvp.welcomeYes", { count: 3 })}</p>     // {count} wird ersetzt
//
// Die aktuelle Sprache liegt im LangContext (Provider in App, gesetzt aus
// der Sprachwahl + localStorage).

const STR = {
  de: {
    // Sprachwahl-Screen
    "lang.eyebrow":        "An invitation · 2026",
    "lang.dateText":       "XXIX · VIII · MMXXVI",
    "lang.choose":         "Wählen · Choisissez · Choose",
    "lang.btn.de":         "DEUTSCH",
    "lang.btn.fr":         "FRANÇAIS",
    "lang.btn.en":         "ENGLISH",

    // Login
    "login.eyebrow":       "Espace invité",
    "login.title":         "Willkommen",
    "login.subtitle":      "liebe Gäste",
    "login.intro":         "Bitte geben Sie die Zugangsdaten ein, die Sie mit Ihrer Einladung erhalten haben.",
    "login.username":      "Benutzername",
    "login.password":      "Passwort",
    "login.show":          "ANZEIGEN",
    "login.hide":          "VERBERGEN",
    "login.submit":        "ANMELDEN",
    "login.submitting":    "…",
    "login.error":         "Diese Zugangsdaten passen nicht. Bitte versuchen Sie es erneut.",
    "login.forgot":        "Zugangsdaten vergessen?",
    "login.demo":          "Demo · zum Testen",
    "login.heroLine1":     "Nikolauskloster",
    "login.heroLine2":     "Jüchen",

    // Home Top-Bar
    "topbar.logout":       "ABMELDEN",

    // Home Hero
    // Anrede abhängig von guest.salutation: "m" | "f" | "family"
    "home.welcomePrefix.m":      "Lieber",
    "home.welcomePrefix.f":      "Liebe",
    "home.welcomePrefix.family": "Liebe",
    "home.unionText":      "geben sich im Nikolauskloster das Ja-Wort",
    "home.unionText.evening": "feiern ihre Hochzeit im Haus Erholung",
    "home.dateBadge":      "· 29. AUG 2026 ·",
    "home.toRsvp":         "ZUR ZUSAGE ↓",

    // Begrüßung (zwischen Hero und Programm)
    "greeting.greet.m":         "Hallo lieber",
    "greeting.greet.f":         "Hallo liebe",
    "greeting.greet.family":    "Hallo liebe",
    "greeting.intro":           "Mit großer Freude laden wir euch ein, diesen besonderen Tag mit uns zu feiern. Am 29.08.2026 sagen wir Ja zueinander – und würden uns von Herzen freuen, wenn ihr diesen unvergesslichen Moment gemeinsam mit uns erlebt, lacht, tanzt und Erinnerungen schafft.",
    "greeting.kidsNote":        "Kleine Anmerkung am Rande: Wir feiern im (fast) erwachsenen Kreis – Kinder sind erst ab 15 Jahren mit dabei. Nutzt den Tag also als kleine Auszeit und tanzt für zwei!",
    "greeting.dresscodeTitle":  "Dresscode",
    "greeting.dresscodeBody":   "Damit unser Tag auch farblich harmonisch wird, bitten wir euch freundlich, auf Kleidung in den Farben <strong>Blau</strong>, <strong>Weiß</strong> und <strong>Rot</strong> zu verzichten.",

    // Programm
    "programme.eyebrow":   "I",
    "programme.title":     "Das Programm",
    "programme.eveningOnly": "Wir freuen uns auf euch ab 20:30 Uhr zur Party.",
    "programme.it.meeting":    "Treffen",
    "programme.it.meetingSub": "am Nikolauskloster",
    "programme.it.trauung":    "Kirchliche Trauung",
    "programme.it.trauungSub": "Klosterkirche · Nikolauskloster",
    "programme.it.sekt":       "Sektempfang",
    "programme.it.sektSub":    "vor der Kirche",
    "programme.it.hall":       "Empfang im Saal",
    "programme.it.hallSub":    "Haus Erholung",
    "programme.it.dinner":     "Abendessen",
    "programme.it.dinnerSub":  "Haus Erholung",
    "programme.it.party":      "Party",
    "programme.it.partySub":   "Tanz bis in den Morgen",

    // Orte
    "venue.eyebrow":            "II",
    "venue.title":              "Die Orte",
    "venue.ceremony.label":     "Trauung",
    "venue.ceremony.name":      "Nikolauskloster",
    "venue.ceremony.addrLine1": "41363 Jüchen",
    "venue.ceremony.addrLine2": "Deutschland",
    "venue.party.label":        "Empfang & Feier",
    "venue.party.name":         "Haus Erholung",
    "venue.party.addrLine1":    "Johann-Peter-Boelling-Platz",
    "venue.party.addrLine2":    "41061 Mönchengladbach",
    "venue.openMaps":           "IN MAPS ÖFFNEN",

    // RSVP-Intro
    "rsvp.eyebrow":        "III · Ihre Antwort",
    "rsvp.title1":         "Bestätigen",
    "rsvp.title2":         "Sie Ihre Teilnahme",
    "rsvp.deadlineLabel":  "Bitte antworten Sie bis zum",
    "rsvp.deadlineDate":   "15. Juli 2026",

    // Choices
    "rsvp.yes":            "JA",
    "rsvp.yesTitle":       "Wir kommen gerne",
    "rsvp.no":             "NEIN",
    "rsvp.noTitle":        "Wir können leider nicht",

    // Form
    "rsvp.detailsHead":    "─ Einige Angaben ─",
    "rsvp.countLabel":     "Anzahl Gäste · max",
    "rsvp.dietLabel":      "Ernährung",
    "rsvp.diet.vegetarian": "Vegetarisch",
    "rsvp.diet.vegan":      "Vegan",
    "rsvp.diet.everything": "Ich esse alles",
    "rsvp.send":           "ANTWORT SENDEN",
    "rsvp.editHint":       "Sie können Ihre Antwort bis zum 15. Juli 2026 ändern.",

    // Bestätigung
    "confirm.yes":         "ZUGESAGT",
    "confirm.no":          "ABGESAGT",
    "confirm.yesText":     "Wir freuen uns auf euch{countPart}.",   // {countPart}: " (3 Personen)" oder ""
    "confirm.noText":      "Schade — wir sind in Gedanken bei euch.",
    "confirm.dietNote":    "Hinweis:",
    "confirm.timestamp":   "Antwort vom {date}",
    "confirm.edit":        "ANTWORT ÄNDERN",
    "confirm.countPersons": " ({count} Personen)",
    "confirm.locale":      "de-DE",

    // Frist abgelaufen
    "lock.title":          "Die Antwort-Frist ist leider abgelaufen.",
    "lock.body":           "Bitte meldet euch direkt bei uns.",

    // Footer
    "footer.with":         "Mit Liebe,",
    "footer.names":        "Jordan & Alisha",
  },

  fr: {
    "lang.eyebrow":        "An invitation · 2026",
    "lang.dateText":       "XXIX · VIII · MMXXVI",
    "lang.choose":         "Choisissez · Wählen · Choose",
    "lang.btn.de":         "DEUTSCH",
    "lang.btn.fr":         "FRANÇAIS",
    "lang.btn.en":         "ENGLISH",

    "login.eyebrow":       "Espace invité",
    "login.title":         "Bienvenue",
    "login.subtitle":      "chers invités",
    "login.intro":         "Veuillez entrer les identifiants reçus avec votre invitation.",
    "login.username":      "Nom d'utilisateur",
    "login.password":      "Mot de passe",
    "login.show":          "AFFICHER",
    "login.hide":          "MASQUER",
    "login.submit":        "SE CONNECTER",
    "login.submitting":    "…",
    "login.error":         "Ces identifiants ne correspondent pas. Veuillez réessayer.",
    "login.forgot":        "Identifiants oubliés ?",
    "login.demo":          "Démo · pour tester",
    "login.heroLine1":     "Nikolauskloster",
    "login.heroLine2":     "Jüchen",

    "topbar.logout":       "DÉCONNEXION",

    "home.welcomePrefix.m":      "Cher",
    "home.welcomePrefix.f":      "Chère",
    "home.welcomePrefix.family": "Chère",
    "home.unionText":      "s'unissent au Nikolauskloster",
    "home.unionText.evening": "célèbrent leur mariage à la Haus Erholung",
    "home.dateBadge":      "· 29 AOÛT 2026 ·",
    "home.toRsvp":         "VERS LA RÉPONSE ↓",

    "greeting.greet.m":         "Bonjour cher",
    "greeting.greet.f":         "Bonjour chère",
    "greeting.greet.family":    "Bonjour chère",
    "greeting.intro":           "C'est avec une grande joie que nous vous invitons à célébrer cette journée si particulière à nos côtés. Le 29.08.2026, nous nous dirons oui – et nous serions profondément heureux de partager ce moment inoubliable avec vous, de rire, de danser et de créer des souvenirs ensemble.",
    "greeting.kidsNote":        "Petite précision : nous fêtons entre (presque) adultes – les enfants sont les bienvenus à partir de 15 ans. Profitez de cette journée comme d'une petite parenthèse et dansez pour deux !",
    "greeting.dresscodeTitle":  "Code vestimentaire",
    "greeting.dresscodeBody":   "Afin que notre journée soit aussi harmonieuse en couleurs, nous vous prions aimablement d'éviter les tenues dans les tons <strong>bleu</strong>, <strong>blanc</strong> et <strong>rouge</strong>.",

    "programme.eyebrow":   "I",
    "programme.title":     "Le Programme",
    "programme.eveningOnly": "Nous vous attendons à partir de 20h30 pour la fête.",
    "programme.it.meeting":    "Rendez-vous",
    "programme.it.meetingSub": "au Nikolauskloster",
    "programme.it.trauung":    "Cérémonie religieuse",
    "programme.it.trauungSub": "Église du Nikolauskloster",
    "programme.it.sekt":       "Vin d'honneur",
    "programme.it.sektSub":    "devant l'église",
    "programme.it.hall":       "Accueil en salle",
    "programme.it.hallSub":    "Haus Erholung",
    "programme.it.dinner":     "Dîner",
    "programme.it.dinnerSub":  "Haus Erholung",
    "programme.it.party":      "Fête",
    "programme.it.partySub":   "Danse jusqu'au matin",

    "venue.eyebrow":            "II",
    "venue.title":              "Les Lieux",
    "venue.ceremony.label":     "Cérémonie",
    "venue.ceremony.name":      "Nikolauskloster",
    "venue.ceremony.addrLine1": "41363 Jüchen",
    "venue.ceremony.addrLine2": "Allemagne",
    "venue.party.label":        "Réception & Fête",
    "venue.party.name":         "Haus Erholung",
    "venue.party.addrLine1":    "Johann-Peter-Boelling-Platz",
    "venue.party.addrLine2":    "41061 Mönchengladbach",
    "venue.openMaps":           "OUVRIR DANS MAPS",

    "rsvp.eyebrow":        "III · Votre réponse",
    "rsvp.title1":         "Confirmez",
    "rsvp.title2":         "votre présence",
    "rsvp.deadlineLabel":  "Merci de répondre avant le",
    "rsvp.deadlineDate":   "15 juillet 2026",

    "rsvp.yes":            "OUI",
    "rsvp.yesTitle":       "Nous viendrons avec joie",
    "rsvp.no":             "NON",
    "rsvp.noTitle":        "Nous ne pourrons pas",

    "rsvp.detailsHead":    "─ Quelques informations ─",
    "rsvp.countLabel":     "Nombre d'invités · max",
    "rsvp.dietLabel":      "Régime alimentaire",
    "rsvp.diet.vegetarian": "Végétarien",
    "rsvp.diet.vegan":      "Végan",
    "rsvp.diet.everything": "Je mange de tout",
    "rsvp.send":           "ENVOYER MA RÉPONSE",
    "rsvp.editHint":       "Vous pouvez modifier votre réponse jusqu'au 15 juillet 2026.",

    "confirm.yes":         "ACCEPTÉ",
    "confirm.no":          "REFUSÉ",
    "confirm.yesText":     "Nous serons heureux de vous accueillir{countPart}.",
    "confirm.noText":      "Dommage — nous serons avec vous en pensée.",
    "confirm.dietNote":    "Note :",
    "confirm.timestamp":   "Réponse du {date}",
    "confirm.edit":        "MODIFIER MA RÉPONSE",
    "confirm.countPersons": " ({count} personnes)",
    "confirm.locale":      "fr-FR",

    "lock.title":          "La date limite de réponse est dépassée.",
    "lock.body":           "Merci de nous contacter directement.",

    "footer.with":         "Avec amour,",
    "footer.names":        "Jordan & Alisha",
  },

  en: {
    "lang.eyebrow":        "An invitation · 2026",
    "lang.dateText":       "XXIX · VIII · MMXXVI",
    "lang.choose":         "Choose · Wählen · Choisissez",
    "lang.btn.de":         "DEUTSCH",
    "lang.btn.fr":         "FRANÇAIS",
    "lang.btn.en":         "ENGLISH",

    "login.eyebrow":       "Guest area",
    "login.title":         "Welcome",
    "login.subtitle":      "dear guests",
    "login.intro":         "Please enter the credentials you received with your invitation.",
    "login.username":      "Username",
    "login.password":      "Password",
    "login.show":          "SHOW",
    "login.hide":          "HIDE",
    "login.submit":        "SIGN IN",
    "login.submitting":    "…",
    "login.error":         "These credentials don't match. Please try again.",
    "login.forgot":        "Forgot your credentials?",
    "login.demo":          "Demo · to test",
    "login.heroLine1":     "Nikolauskloster",
    "login.heroLine2":     "Jüchen",

    "topbar.logout":       "LOG OUT",

    "home.welcomePrefix.m":      "Dear",
    "home.welcomePrefix.f":      "Dear",
    "home.welcomePrefix.family": "Dear",
    "home.unionText":      "are getting married at the Nikolauskloster",
    "home.unionText.evening": "are celebrating their wedding at Haus Erholung",
    "home.dateBadge":      "· 29 AUG 2026 ·",
    "home.toRsvp":         "TO RSVP ↓",

    "greeting.greet.m":         "Hello dear",
    "greeting.greet.f":         "Hello dear",
    "greeting.greet.family":    "Hello dear",
    "greeting.intro":           "It is with great joy that we invite you to celebrate this special day with us. On 29 August 2026 we will say \"I do\" – and we would be truly delighted to share this unforgettable moment with you, to laugh, to dance and to make memories together.",
    "greeting.kidsNote":        "One little note: we are celebrating with a (nearly) all-grown-up crowd – children join from 15 years on. So treat yourselves to a day off and dance the night away!",
    "greeting.dresscodeTitle":  "Dress code",
    "greeting.dresscodeBody":   "So that our day is harmonious in colour too, we kindly ask you to avoid clothing in the colours <strong>blue</strong>, <strong>white</strong> and <strong>red</strong>.",

    "programme.eyebrow":   "I",
    "programme.title":     "The Programme",
    "programme.eveningOnly": "We look forward to welcoming you from 8:30 pm for the party.",
    "programme.it.meeting":    "Gathering",
    "programme.it.meetingSub": "at the Nikolauskloster",
    "programme.it.trauung":    "Church Ceremony",
    "programme.it.trauungSub": "Cloister Church · Nikolauskloster",
    "programme.it.sekt":       "Champagne Reception",
    "programme.it.sektSub":    "in front of the church",
    "programme.it.hall":       "Welcome at the Hall",
    "programme.it.hallSub":    "Haus Erholung",
    "programme.it.dinner":     "Dinner",
    "programme.it.dinnerSub":  "Haus Erholung",
    "programme.it.party":      "Party",
    "programme.it.partySub":   "Dancing until dawn",

    "venue.eyebrow":            "II",
    "venue.title":              "The Venues",
    "venue.ceremony.label":     "Ceremony",
    "venue.ceremony.name":      "Nikolauskloster",
    "venue.ceremony.addrLine1": "41363 Jüchen",
    "venue.ceremony.addrLine2": "Germany",
    "venue.party.label":        "Reception & Celebration",
    "venue.party.name":         "Haus Erholung",
    "venue.party.addrLine1":    "Johann-Peter-Boelling-Platz",
    "venue.party.addrLine2":    "41061 Mönchengladbach",
    "venue.openMaps":           "OPEN IN MAPS",

    "rsvp.eyebrow":        "III · Your response",
    "rsvp.title1":         "Confirm",
    "rsvp.title2":         "your attendance",
    "rsvp.deadlineLabel":  "Please respond by",
    "rsvp.deadlineDate":   "15 July 2026",

    "rsvp.yes":            "YES",
    "rsvp.yesTitle":       "We'll be there",
    "rsvp.no":             "NO",
    "rsvp.noTitle":        "We can't make it",

    "rsvp.detailsHead":    "─ A few details ─",
    "rsvp.countLabel":     "Number of guests · max",
    "rsvp.dietLabel":      "Diet",
    "rsvp.diet.vegetarian": "Vegetarian",
    "rsvp.diet.vegan":      "Vegan",
    "rsvp.diet.everything": "I eat everything",
    "rsvp.send":           "SEND RESPONSE",
    "rsvp.editHint":       "You can edit your response until 15 July 2026.",

    "confirm.yes":         "CONFIRMED",
    "confirm.no":          "DECLINED",
    "confirm.yesText":     "We look forward to seeing you{countPart}.",
    "confirm.noText":      "Such a shame — we'll be thinking of you.",
    "confirm.dietNote":    "Note:",
    "confirm.timestamp":   "Response from {date}",
    "confirm.edit":        "EDIT RESPONSE",
    "confirm.countPersons": " ({count} people)",
    "confirm.locale":      "en-GB",

    "lock.title":          "The response deadline has passed.",
    "lock.body":           "Please contact us directly.",

    "footer.with":         "With love,",
    "footer.names":        "Jordan & Alisha",
  },
};

// Context + Hook
const LangContext = React.createContext("de");

const useT = () => {
  const lang = React.useContext(LangContext);
  return (key, vars) => {
    let s = (STR[lang] && STR[lang][key]) || (STR.de && STR.de[key]) || key;
    if (vars) for (const k in vars) s = s.split("{" + k + "}").join(vars[k]);
    return s;
  };
};

const useLang = () => React.useContext(LangContext);

Object.assign(window, { STR, LangContext, useT, useLang });
