<?php
/**
 * عزل بيانات الأمان وسجل التدقيق لكل مختبر:
 * 1. blocked_ips: إضافة tenant_id — كل مختبر يرى ويُدير IPs المحظورة الخاصة به فقط
 * 2. audit_log: إضافة tenant_id — لتصفية سجل التدقيق حسب المختبر
 */
$config = require __DIR__ . '/../config/config.php';
$pdo = new PDO(
    'mysql:host=' . $config['db']['host'] . ';dbname=' . $config['db']['name'] . ';charset=utf8mb4',
    $config['db']['user'],
    $config['db']['pass'],
    [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);

$changes = [];

// التأكد من وجود جدول blocked_ips (للمثبتات الجديدة)
try {
    $pdo->exec(
        "CREATE TABLE IF NOT EXISTS blocked_ips (
            id INT AUTO_INCREMENT PRIMARY KEY,
            tenant_id INT NOT NULL DEFAULT 1,
            ip_address VARCHAR(45) NOT NULL,
            blocked_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
            blocked_until DATETIME NULL,
            reason VARCHAR(255) NULL,
            attempts_count INT NOT NULL DEFAULT 0,
            is_permanent TINYINT(1) NOT NULL DEFAULT 0,
            created_by INT NULL,
            UNIQUE KEY uk_tenant_ip (tenant_id, ip_address),
            INDEX idx_tenant (tenant_id),
            INDEX idx_blocked_until (blocked_until)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4"
    );
} catch (PDOException $e) {}

// 1. blocked_ips: إضافة tenant_id للجداول القديمة
try {
    $pdo->query('SELECT tenant_id FROM blocked_ips LIMIT 1');
} catch (PDOException $e) {
    try {
        $pdo->exec('ALTER TABLE blocked_ips ADD COLUMN tenant_id INT NOT NULL DEFAULT 1 AFTER id');
        $changes[] = 'blocked_ips.tenant_id';
    } catch (PDOException $e2) {}
}
try {
    $pdo->query('SELECT 1 FROM blocked_ips LIMIT 1');
    $pdo->exec('ALTER TABLE blocked_ips DROP INDEX ip_address');
} catch (PDOException $e) {}
try {
    $pdo->exec('ALTER TABLE blocked_ips ADD UNIQUE KEY uk_tenant_ip (tenant_id, ip_address)');
} catch (PDOException $e) {
    if (strpos($e->getMessage(), 'Duplicate') === false) {}
}

// 2. audit_log: إضافة tenant_id
try {
    $pdo->query('SELECT tenant_id FROM audit_log LIMIT 1');
} catch (PDOException $e) {
    try {
        $pdo->exec('ALTER TABLE audit_log ADD COLUMN tenant_id INT NULL AFTER user_id');
        $pdo->exec('CREATE INDEX idx_audit_tenant ON audit_log (tenant_id)');
        $changes[] = 'audit_log.tenant_id';
    } catch (PDOException $e2) {}
}

echo "Security/audit per-tenant migration done. Changes: " . implode(', ', $changes) . "\n";
