<?php

// Modal dialogs (wire-elements/modal). German = source of truth (R16).
// Keys grouped by modal via sub-key prefixes. Shared strings (Speichern, Abbrechen,
// Schließen, Hinzufügen, Anwenden, „Server nicht gefunden.", …) come from common.*.
return [
    // ── Add SSH key ───────────────────────────────────────────────────────
    'add_ssh_key' => [
        'title' => 'SSH-Schlüssel hinzufügen',
        'name_label' => 'Name (optional)',
        'name_placeholder' => 'z.B. Backup-Laptop · Admin-Notebook',
        'subtitle_before' => 'Öffentlichen Schlüssel einfügen — er wird in',
        'subtitle_after' => 'ergänzt.',
        'public_key_label' => 'Öffentlicher Schlüssel',
        'generate' => 'Neues Paar generieren',
        'generating' => 'generiere…',
        'public_key_placeholder' => 'ssh-ed25519 AAAA… kommentar — oder oben generieren',
        'private_key_warning' => 'Privater Schlüssel — erscheint nur jetzt, sicher speichern.',
        'notify_added' => 'SSH-Schlüssel hinzugefügt.',
    ],

    // ── Create server ─────────────────────────────────────────────────────
    'create_server' => [
        'title' => 'Server hinzufügen',
        'subtitle' => 'Neuen Host in die Flotte aufnehmen und den SSH-Zugang im verschlüsselten Tresor hinterlegen.',
        'name_label' => 'Name',
        'name_placeholder' => 'z. B. Prod-Web-01',
        'ip_host_label' => 'IP/Host',
        'ip_host_placeholder' => '203.0.113.10 oder host.example.com',
        'ssh_port_label' => 'SSH-Port',
        'user_label' => 'Benutzer',
        'auth_label' => 'Authentifizierung',
        'auth_password' => 'Passwort',
        'auth_key' => 'Privater Schlüssel',
        'secret_key_label' => 'Privater Schlüssel (PEM)',
        'secret_password_label' => 'Passwort',
        'key_placeholder' => '-----BEGIN OPENSSH PRIVATE KEY-----',
        'passphrase_label' => 'Passphrase (optional)',
        'passphrase_placeholder' => 'leer = keine',
        'credential_name_label' => 'Zugangs-Name (optional)',
        'credential_name_placeholder' => 'z. B. Root-Login · Deploy-User',
        'validation_ip_or_host' => 'Bitte eine gültige IP-Adresse oder einen Hostnamen angeben.',
        'validation_ssh_failed' => 'SSH-Verbindung fehlgeschlagen: :error. Bitte Zugangsdaten prüfen.',
        'attr_name' => 'Name',
        'attr_ip' => 'IP/Host',
        'attr_ssh_port' => 'SSH-Port',
        'attr_user' => 'Benutzer',
        'attr_auth' => 'Authentifizierung',
        'attr_secret_key' => 'Privater Schlüssel',
        'attr_secret_password' => 'Passwort',
        'attr_credential_name' => 'Zugangs-Name',
        'notify_added' => 'Server hinzugefügt.',
    ],

    // ── Edit credential ───────────────────────────────────────────────────
    'edit_credential' => [
        'title' => 'SSH-Zugang',
        'subtitle_before' => 'Hier den Zugang hinterlegen — z. B.',
        'subtitle_after' => 'für volle Steuerung (systemctl, Journal).',
        'name_label' => 'Name (optional)',
        'name_placeholder' => 'z. B. Prod-Server X · Backup-User',
        'user_label' => 'Benutzer',
        'auth_label' => 'Authentifizierung',
        'auth_password' => 'Passwort',
        'auth_key' => 'Privater Schlüssel',
        'secret_key_label' => 'Privater Schlüssel (PEM)',
        'secret_password_label' => 'Passwort',
        'key_placeholder' => '-----BEGIN OPENSSH PRIVATE KEY-----',
        'passphrase_label' => 'Passphrase (optional)',
        'passphrase_placeholder' => 'leer = keine',
        'error_required' => 'Benutzer und Passwort/Schlüssel sind erforderlich.',
        'error_name_too_long' => 'Name darf höchstens 120 Zeichen lang sein.',
        'notify_saved' => 'Zugangsdaten gespeichert.',
    ],

    // ── fail2ban: ban IP ──────────────────────────────────────────────────
    'fail2ban_ban' => [
        'title' => 'IP manuell sperren',
        'subtitle' => 'Sperrt eine IP-Adresse sofort im gewählten Jail. Loopback und der Clusev-Zugang können nicht gesperrt werden.',
        'jail_label' => 'Jail',
        'ip_label' => 'IP-Adresse',
        'ip_placeholder' => 'z. B. 203.0.113.10',
        'submit' => 'IP sperren',
        'error_ban_failed' => 'Sperren fehlgeschlagen.',
        'notify_banned' => 'IP :ip gesperrt.',
    ],

    // ── fail2ban: config ──────────────────────────────────────────────────
    'fail2ban_config' => [
        'title' => 'fail2ban konfigurieren',
        'subtitle' => 'Legt fest, wann fail2ban auf :server eine IP sperrt und wie lange. Wiederholte fehlgeschlagene Anmeldungen innerhalb des Zeitfensters führen zur Sperre.',
        'this_server' => 'diesem Server',
        'bantime_label' => 'Sperrdauer',
        'bantime_placeholder' => 'z. B. 600, 10m, 1h, -1 = dauerhaft',
        'maxretry_label' => 'Max. Fehlversuche',
        'findtime_label' => 'Zeitfenster',
        'findtime_placeholder' => 'z. B. 600, 10m, 1h',
        'error_read_locked' => 'Aktuelle Konfiguration konnte nicht gelesen werden — Speichern ist gesperrt.',
        'error_bantime_invalid' => 'Ungültige Dauer (z. B. 600, 10m, 1h, -1 für dauerhaft).',
        'error_findtime_invalid' => 'Ungültige Dauer (z. B. 600, 10m, 1h).',
        'error_save_failed' => 'Speichern fehlgeschlagen. :output',
        'attr_bantime' => 'Sperrdauer',
        'attr_maxretry' => 'Max. Fehlversuche',
        'attr_findtime' => 'Zeitfenster',
        'notify_saved' => 'fail2ban konfiguriert.',
    ],

    // ── File editor ───────────────────────────────────────────────────────
    'file_editor' => [
        'too_big' => 'Datei zu groß zum Bearbeiten (über 256 KB) — bitte herunterladen.',
        'image_too_big' => 'Bild zu groß für die Vorschau (über 5 MB) — bitte herunterladen.',
        'image_read_failed' => 'Bild konnte nicht gelesen werden.',
        'binary' => 'Binärdatei — kann nicht im Editor angezeigt werden.',
        'notify_saved' => '„:name“ gespeichert.',
    ],

    // ── Firewall rule ─────────────────────────────────────────────────────
    'firewall_rule' => [
        'title' => 'Firewall-Regel hinzufügen',
        'subtitle_firewalld' => 'Öffnet einen Port in der Standard-Zone von firewalld.',
        'subtitle_ufw' => 'Neue UFW-Regel. Quelle leer lassen = von überall.',
        'action_label' => 'Aktion',
        'action_allow' => 'Erlauben (allow)',
        'action_deny' => 'Verwerfen (deny)',
        'action_reject' => 'Ablehnen (reject)',
        'action_limit' => 'Begrenzen (limit)',
        'port_label' => 'Port',
        'port_optional' => '(optional)',
        'port_placeholder' => 'z. B. 8080',
        'proto_label' => 'Protokoll',
        'proto_both' => 'Beide',
        'source_label' => 'Quelle (optional)',
        'source_placeholder' => 'IP oder CIDR, z. B. 10.0.0.0/8',
        'error_add_failed' => 'Regel konnte nicht hinzugefügt werden.',
        'summary_port_opened' => 'Port :port/:proto geöffnet',
        'summary_from' => 'von :source',
        'notify_added' => 'Firewall-Regel hinzugefügt.',
    ],

    // ── Hardening action ──────────────────────────────────────────────────
    'hardening_action' => [
        'title_fallback' => 'Härtung anwenden',
        'result_ok' => 'Erfolgreich angewendet.',
        'result_failed' => 'Fehlgeschlagen.',
        'error_unknown' => 'Unbekannter Fehler.',
        'audit_failed_suffix' => '(fehlgeschlagen)',
        'notify_applied' => ':action angewendet.',
        'notify_failed' => ':action fehlgeschlagen.',
    ],

    // ── System update ─────────────────────────────────────────────────────
    'system_update' => [
        'title' => 'System-Updates',
        'subtitle' => 'Aktualisiert die installierten Pakete auf :server über die Paketverwaltung. Es werden keine neuen Versionssprünge erzwungen — nur verfügbare Updates eingespielt.',
        'this_server' => 'diesem Server',
        'unsupported_fallback' => 'Auf diesem System nicht verfügbar.',
        'count_unknown' => 'Update-Anzahl unbekannt',
        'count_one' => '1 Paket-Update verfügbar',
        'count_many' => ':count Paket-Updates verfügbar',
        'hint_unknown' => 'Konnte nicht ermittelt werden — Aktualisierung trotzdem möglich.',
        'hint_recommended' => 'Aktualisierung empfohlen.',
        'hint_up_to_date' => 'Das System ist auf dem aktuellen Stand.',
        'result_ok' => 'System aktualisiert.',
        'result_failed' => 'Aktualisierung fehlgeschlagen.',
        'submit' => 'Jetzt aktualisieren',
        'audit_failed_suffix' => '(fehlgeschlagen)',
        'notify_updated' => 'System aktualisiert.',
        'notify_failed' => 'Aktualisierung fehlgeschlagen.',
    ],

    // ── SSH key provision ─────────────────────────────────────────────────
    'ssh_key_provision' => [
        'title' => 'SSH-Key erstellen & Passwort-Login deaktivieren',
        'subtitle' => 'Für :server wird ein SSH-Key erzeugt und installiert; Passwort-Login wird erst danach abgeschaltet.',
        'steps_title' => 'Ablauf',
        'step_generate' => 'Key erzeugen und auf dem Server hinterlegen.',
        'step_verify' => 'Key-Login prüfen — Passwort-Login bleibt bis dahin aktiv.',
        'step_disable' => 'Erst nach erfolgreicher Prüfung: Passwort-Login deaktivieren.',
        'safety_note' => 'Schlägt die Prüfung fehl, bleibt Passwort-Login aktiv — kein Aussperren.',
        'confirm' => 'Erstellen & deaktivieren',
        'running' => 'Wird ausgeführt …',
        'result_ok' => 'Passwort-Login deaktiviert — Zugang nur noch per Key.',
        'key_warning' => 'Diesen Private-Key jetzt sichern — er wird nur einmal angezeigt.',
        'download' => 'Key herunterladen',
        'done' => 'Fertig',
        'notify_ok' => 'SSH-Key eingerichtet, Passwort-Login deaktiviert (:server).',
        'notify_failed' => 'SSH-Key-Einrichtung fehlgeschlagen.',
        'error_unknown' => 'Unbekannter Fehler.',
    ],

    // ── Generic confirm dialog defaults (ConfirmAction) ───────────────────
    'confirm_action' => [
        'default_heading' => 'Aktion bestätigen',
        'default_notify' => 'Aktion ausgeführt.',
        'rejected' => 'Bestätigung ungültig oder abgelaufen.',
    ],
];
