<?php
/**
 * Admin/Staff/setup.php
 * سكربت إعداد المسؤول الأول (Super Admin)
 * ⚠️ للاستخدام لمرة واحدة فقط. يحمي نفسه بـ MIGRATION_ADMIN_KEY.
 * بعد أول تشغيل ناجح، امسح الملف من السيرفر.
 */
require_once __DIR__ . '/../../core/bootstrap.php';

// ── حماية بمفتاح الترحيل ────────────────────────────────
$adminKey         = filterRequest('admin_key') ?? '';
$expectedAdminKey = getenv('MIGRATION_ADMIN_KEY');
if (empty($adminKey) || empty($expectedAdminKey) || !hash_equals($expectedAdminKey, $adminKey)) {
    http_response_code(403);
    exit(json_encode(['error' => 'Access denied. Admin key required.']));
}

$con = Database::get('main');

// ── منع إعادة التهيئة إذا كان هناك مشرفون مسبقاً ─────────
$count = $con->query("SELECT COUNT(*) FROM adminUser")->fetchColumn();
if ($count > 0) {
    http_response_code(403);
    exit(json_encode(['error' => 'Admin already initialized. This script runs only once.']));
}

// ── كلمة المرور من البيئة أو تُنشأ عشوائياً ──────────────
$password = getenv('SETUP_SUPER_ADMIN_PASSWORD');
if (!$password) {
    $password = bin2hex(random_bytes(12));
}
$hashedPass = password_hash($password, PASSWORD_DEFAULT);

// ── بصمات افتراضية (تُستبدل عند أول تسجيل دخول فعلي) ───
$admins = [
    [
        'name' => 'Super Admin',
        'fp'   => 'SETUP_DEFAULT_FP_001',
        'role' => 'super_admin'
    ]
];

try {
    foreach ($admins as $admin) {
        $encName  = $encryptionHelper->encryptData($admin['name']);
        $encFp    = $encryptionHelper->encryptData($admin['fp']);
        $fpHash   = hash('sha256', $admin['fp']);
        $uniqueId = bin2hex(random_bytes(16));

        $sql = "INSERT INTO adminUser (id, fingerprint, fingerprint_hash, name, password, role, created_at) 
                VALUES (:id, :fp, :fp_hash, :name, :pass, :role, NOW())";
        $stmt = $con->prepare($sql);
        $stmt->execute([
            ':id'      => $uniqueId,
            ':fp'      => $encFp,
            ':fp_hash' => $fpHash,
            ':name'    => $encName,
            ':pass'    => $hashedPass,
            ':role'    => $admin['role']
        ]);
    }
    echo "<h1>Initialization Successful</h1>";
} catch (Exception $e) {
    echo "An internal error occurred";
}
