"""Fill empty entries in i18n/de-DE.toml with German translations.

Translations follow wise-relations.com styleguide:
- Sie-Form throughout
- No banned buzzwords (ganzheitlich, innovativ, Mehrwert, Lösung as buzzword)
- Active voice, 12-22 word sentences
- "Webanalyse" instead of "GoatCounter" in user-facing strings
"""

import re
import sys
from pathlib import Path

TRANSLATIONS = {
    "button/delete-pageviews": "Seitenaufrufe löschen",
    "button/merge": "Zusammenführen",
    "button/search": "Suchen",
    "button/show": "anzeigen",
    "button/upload-ga-import": "Hochladen",
    "dashboard/loading": "Lädt …",
    "dashboard/pages/change": "Veränderung",
    "data-collect/help/hits": "Einzelne Seitenaufrufe für Exporte speichern. Hat keine Auswirkung auf andere Funktionen. Aggregierte Daten lassen sich weiterhin per API exportieren.",
    "data-collect/help/user-agent": "Browser- und Systemname werden aus dem User-Agent-Header abgeleitet (der Header selbst wird nicht gespeichert).",
    "data-collect/label/hits": "Einzelne Seitenaufrufe",
    "dont-lock": "Nicht sperren",
    "email-report/daily": "Täglich",
    "email-report/monthly": "Monatlich",
    "email-report/never": "Nie",
    "email-report/two-weeks": "Alle zwei Wochen",
    "email-report/weekly": "Wöchentlich",
    "error/email-exists": 'Die E-Mail-Adresse „%(email)“ wird bereits von einem anderen Nutzer dieser Website verwendet',
    "error/merge-self": "Ein Pfad lässt sich nicht mit sich selbst zusammenführen",
    "error/unknown-activation-token": "Unbekannter Aktivierungs-Token",
    "header/add-api-token": "Neuen API-Token anlegen",
    "header/export-to-csv": "Als CSV exportieren",
    "header/fewer-number": "Weniger Zahlen anzeigen",
    "header/import-from-csv": "Aus CSV importieren",
    "header/import-from-ga": "Gesamtwerte aus Google Analytics",
    "header/last-used-at": "Zuletzt verwendet",
    "header/manage-pageviews": "Seitenaufrufe verwalten",
    "header/merge-account": "Konto zusammenführen",
    "help/allow-embed": "Komma-getrennte Liste von Domains oder URLs, die die Webanalyse in einem Frame einbetten dürfen; %[vollständige Dokumentation].",
    "help/configure-dashboard": "Dashboard konfigurieren",
    "help/datepicker": "Auf Desktop-Systemen wird ein eigener JavaScript-Datepicker verwendet, der meist eine bessere Bedienung bietet. Sie können ihn deaktivieren und den Datepicker Ihres Browsers nutzen.",
    "help/email-reports": "Berichte werden am ersten Tag des neuen Zeitraums versendet (z. B. am ersten Tag des Monats).",
    "help/fewer-numbers": "Zahlen werden im Dashboard ausgeblendet. Sie erhalten weiterhin einen brauchbaren Überblick über die Vorgänge auf Ihrer Website, ohne sich von Tagesschwankungen ablenken zu lassen.",
    "help/fewer-numbers-lock": "Diese Einstellung lässt sich für den angegebenen Zeitraum nicht deaktivieren.",
    "help/locked-until": "Gesperrt bis %(date)",
    "help/need-cities": "Diese Option benötigt die „Cities“-Variante der GeoIP-Datenbank. Siehe das <tt>-geo</tt>-Flag in <tt>goatcounter help serve</tt>.",
    "label/access-to-sites": "Zugriff auf Websites",
    "label/campaigns": "Kampagnen",
    "label/dashboard-allow-embed": "Websites, die die Webanalyse einbetten dürfen",
    "label/datepicker": "Eigenen Datepicker aktivieren",
    "label/email-reports": "E-Mail-Berichte versenden",
    "label/fewer-numbers": "Weniger Zahlen anzeigen",
    "label/lock-setting": "Einstellung sperren",
    "label/match-case": "Groß-/Kleinschreibung beachten",
    "label/merge-account-confirmation": "Möchten Sie dieses Konto wirklich zusammenführen?",
    "label/merge-to": "Alle Pfade zusammenführen mit",
    "label/theme": "Erscheinungsbild",
    "link/manage-pageviews": "Seitenaufrufe verwalten",
    "link/merge-account": "Konto zusammenführen",
    "link/show-less": "(weniger anzeigen)",
    "nav-dash/filter-more-help": "Mehr Hilfe",
    "nav-dash/hour": "Stunde",
    "nav-dash/view-by": "Ansicht nach:",
    "nav-fash/filter-less-help": "Weniger Hilfe",
    "new-paren": "(neu)",
    "notify/import-ga-okay": "Daten erfolgreich verarbeitet.",
    "p/add-multiple-accounts": "Mit dem CLI-Befehl <code>goatcounter db create site</code> lassen sich mehrere Konten anlegen. Diese sind vollständig voneinander getrennt.",
    "p/all-sites": "Alle Websites, auch zukünftig angelegte",
    "p/delete-account": "Die Website und sämtliche zugehörigen Daten werden unwiderruflich entfernt.",
    "p/export-csv": "<p>CSV-Exporte setzen voraus, dass das Speichern von Seitenaufrufen in den %[%setting Website-Einstellungen] aktiviert ist; aktuell ist dies deaktiviert.</p>",
    "p/import-ga": 'Google Analytics bietet keine sinnvollen Exporte; verfügbar sind lediglich %[%ga „Berichte“]. Diese liefern einen Überblick über Gesamtwerte pro Pfad ohne weitere Detailtiefe.',
    "p/manage-hits": "Seitenaufrufe entfernen oder zusammenführen.",
    "p/merge-account": "Konten lassen sich zusammenführen, sofern der Administrator-Account eine verifizierte E-Mail-Adresse besitzt, die mit Ihrer aktuellen E-Mail-Adresse identisch ist.",
    "p/num-accounts": "Dieses Konto enthält %(n) Websites:",
    "p/rm-hits-help": "Die Suche ist nicht groß-/kleinschreibungsempfindlich. Folgende Sonderzeichen werden unterstützt: <ul> <li><code>%</code> ist ein Platzhalter; z. B. <code>/seite%.htm</code></li> </ul>",
    "theme/dark": "Dunkel",
    "theme/light": "Hell",
    "theme/system": "Systemeinstellung verwenden",
    "tooltip/change-period": "Veränderung gegenüber dem vorherigen Zeitraum",
    "top-nav/documentation": "Hilfe",
    "validate/need-one": "Mindestens eine Auswahl ist erforderlich",
    "view not set": "Ansicht nicht festgelegt",
}


def main():
    path = Path("i18n/de-DE.toml")
    text = path.read_text(encoding="utf-8")
    lines = text.split("\n")
    out = []
    i = 0
    filled = 0
    skipped_already = 0
    while i < len(lines):
        line = lines[i]
        out.append(line)
        m = re.match(r'^\["([^"]+)"\]$', line)
        if m:
            key = m.group(1)
            # Look ahead to find next entry or empty line, gather body
            body_start = i + 1
            j = body_start
            while j < len(lines) and not lines[j].startswith("["):
                if lines[j].strip() == "" and j + 1 < len(lines) and lines[j + 1].startswith("["):
                    break
                j += 1
            body = "\n".join(lines[body_start:j])
            if "default = " not in body and not any(f" {t} = " in body for t in ("zero", "one", "two", "few", "many")):
                if key in TRANSLATIONS:
                    de_text = TRANSLATIONS[key].replace('"', '\\"')
                    out.append(f'  default = "{de_text}"')
                    filled += 1
                elif key != "Jan Wildeboer <jan@wildeboer.net>":
                    print(f"WARN: no translation provided for {key!r}", file=sys.stderr)
            else:
                skipped_already += 1
        i += 1
    path.write_text("\n".join(out), encoding="utf-8")
    print(f"Filled {filled} entries; {skipped_already} already had translations.")


if __name__ == "__main__":
    main()
