-- =================================================================
-- SECURITY SETTINGS TABLE
-- Tabela do przechowywania konfiguracji bezpieczeństwa systemu
-- =================================================================

CREATE TABLE IF NOT EXISTS security_settings (
    id INT PRIMARY KEY AUTO_INCREMENT,
    setting_key VARCHAR(50) UNIQUE NOT NULL,
    setting_value TEXT NOT NULL,
    setting_type ENUM('boolean', 'number', 'string', 'json') DEFAULT 'boolean',
    description VARCHAR(255),
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    updated_by VARCHAR(50),
    INDEX idx_setting_key (setting_key)
);

-- Wstaw domyślne ustawienia bezpieczeństwa
INSERT INTO security_settings (setting_key, setting_value, setting_type, description) VALUES
    ('rate_limiting_enabled', 'true', 'boolean', 'Włączenie ograniczenia liczby requestów na IP'),
    ('rate_limit_max_requests', '100', 'number', 'Maksymalna liczba requestów na 15 minut'),
    ('rate_limit_window_ms', '900000', 'number', 'Okno czasowe dla rate limiting (ms)'),
    
    ('ip_geolocation_enabled', 'true', 'boolean', 'Włączenie analizy geolokalizacji IP'),
    ('geo_track_vpn', 'true', 'boolean', 'Śledzenie połączeń VPN'),
    ('geo_track_tor', 'true', 'boolean', 'Śledzenie połączeń Tor'),
    ('geo_block_high_risk', 'false', 'boolean', 'Blokowanie połączeń wysokiego ryzyka'),
    
    ('discord_webhooks_enabled', 'true', 'boolean', 'Włączenie powiadomień Discord'),
    ('discord_webhook_url', '', 'string', 'URL webhooka Discord'),
    ('discord_alert_threshold', '7', 'number', 'Próg ryzyka dla alertów (1-10)'),
    ('discord_cooldown_ms', '600000', 'number', 'Cooldown między webhookami (ms)'),
    
    ('require_2fa_enabled', 'false', 'boolean', 'Wymuszenie 2FA dla wszystkich użytkowników'),
    ('require_2fa_roles', '["admin","superadmin","creator"]', 'json', 'Role wymagające 2FA'),
    ('2fa_grace_period_days', '7', 'number', 'Okres przejściowy na włączenie 2FA (dni)')
ON DUPLICATE KEY UPDATE setting_value = VALUES(setting_value);

-- Tabela dla logów zmian konfiguracji
CREATE TABLE IF NOT EXISTS security_settings_audit (
    id INT PRIMARY KEY AUTO_INCREMENT,
    setting_key VARCHAR(50) NOT NULL,
    old_value TEXT,
    new_value TEXT NOT NULL,
    changed_by VARCHAR(50) NOT NULL,
    changed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    ip_address VARCHAR(45),
    INDEX idx_setting_key (setting_key),
    INDEX idx_changed_by (changed_by),
    INDEX idx_changed_at (changed_at)
);
