<?php
/**
 * Builds a copy-paste privacy-policy snippet describing what Brainwerk Security Suite processes.
 *
 * @package Brainwerk Security Suite
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

class Shieldforge_Privacy_Generator {

    public static function register( Shieldforge_Loader $loader ) {
        unset( $loader );
    }

    public static function generate( $locale = 'de' ) {
        $locale     = ( 'en' === $locale ) ? 'en' : 'de';
        $anonymize  = (bool) Shieldforge_Settings::get( 'privacy_anonymize_ip', true );
        $pseudonym  = (bool) Shieldforge_Settings::get( 'privacy_pseudonym_users', false );
        $retention  = (int) Shieldforge_Settings::get( 'log_retention_days', 30 );

        if ( 'en' === $locale ) {
            return self::build_en( $anonymize, $pseudonym, $retention );
        }
        return self::build_de( $anonymize, $pseudonym, $retention );
    }

    private static function build_de( $anonymize, $pseudonym, $retention ) {
        $ip_line = $anonymize
            ? 'Ihre IP-Adresse wird gekuerzt gespeichert (IPv4: letztes Oktett auf 0; IPv6: nur die ersten 64 Bit). Eine Reidentifikation ist damit nicht moeglich.'
            : 'Ihre vollstaendige IP-Adresse wird gespeichert.';
        $user_line = $pseudonym
            ? 'Benutzernamen werden vor der Speicherung pseudonymisiert (HMAC-SHA256 mit installations-spezifischem Salt).'
            : 'Benutzernamen werden im Klartext gespeichert.';
        $name = get_bloginfo( 'name' );
        return "<h2>Sicherheitsprotokoll (Brainwerk Security Suite)</h2>\n"
            . "<p>Zum Schutz vor unbefugten Zugriffen verwendet {$name} das Plugin <strong>Brainwerk Security Suite</strong>. Dabei werden sicherheitsrelevante Ereignisse (Login-Versuche, blockierte Zugriffe, verdaechtige Anfragen) protokolliert.</p>\n"
            . "<p><strong>Verarbeitete Daten:</strong></p>\n"
            . "<ul>\n"
            . "  <li>{$ip_line}</li>\n"
            . "  <li>{$user_line}</li>\n"
            . "  <li>Zeitpunkt, Ereignistyp und (gekuerzter) Request-Pfad.</li>\n"
            . "  <li>User-Agent (Browser-Kennung), max. 255 Zeichen.</li>\n"
            . "</ul>\n"
            . "<p><strong>Speicherdauer:</strong> {$retention} Tage. Danach werden die Eintraege automatisch geloescht.</p>\n"
            . "<p><strong>Rechtsgrundlage:</strong> Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse an der Sicherheit der Webseite).</p>\n"
            . "<p><strong>Empfaenger:</strong> Keine Weitergabe an Dritte. Die Daten verlassen den Server der Webseite nicht.</p>";
    }

    private static function build_en( $anonymize, $pseudonym, $retention ) {
        $ip_line = $anonymize
            ? 'Your IP address is stored in truncated form (IPv4: last octet zeroed; IPv6: first 64 bits only). Re-identification is not possible.'
            : 'Your full IP address is stored.';
        $user_line = $pseudonym
            ? 'Usernames are pseudonymized before storage (HMAC-SHA256 with an installation-specific salt).'
            : 'Usernames are stored in plain text.';
        $name = get_bloginfo( 'name' );
        return "<h2>Security Log (Brainwerk Security Suite)</h2>\n"
            . "<p>To protect against unauthorized access, {$name} uses the <strong>Brainwerk Security Suite</strong> plugin to log security-relevant events (login attempts, blocked access, suspicious requests).</p>\n"
            . "<p><strong>Data processed:</strong></p>\n"
            . "<ul>\n"
            . "  <li>{$ip_line}</li>\n"
            . "  <li>{$user_line}</li>\n"
            . "  <li>Timestamp, event type, and (truncated) request path.</li>\n"
            . "  <li>User-Agent (browser identifier), up to 255 characters.</li>\n"
            . "</ul>\n"
            . "<p><strong>Retention:</strong> {$retention} days. Entries are automatically deleted afterwards.</p>\n"
            . "<p><strong>Legal basis:</strong> Art. 6(1)(f) GDPR (legitimate interest in website security).</p>\n"
            . "<p><strong>Recipients:</strong> No sharing with third parties. Data does not leave the website's server.</p>";
    }
}
