<?php
/**
 * سكريبت لإصلاح جدول roles وإنشاء دور Administrator إذا لم يكن موجوداً
 * استخدمه مرة واحدة فقط: php fix_roles.php
 */

// استخدام نفس طريقة index.php لقراءة الإعدادات
$configFile = __DIR__ . '/config/config.php';
if (!file_exists($configFile)) {
    echo "❌ خطأ: ملف config/config.php غير موجود!\n";
    echo "   المسار المتوقع: $configFile\n";
    exit(1);
}

// قراءة الإعدادات بنفس طريقة index.php
$config = require $configFile;

// التحقق من أن الإعدادات صحيحة
if (!is_array($config)) {
    echo "❌ خطأ: ملف config.php لا يحتوي على مصفوفة صحيحة\n";
    exit(1);
}

// التحقق من وجود إعدادات قاعدة البيانات
if (!isset($config['db']) || !is_array($config['db'])) {
    echo "❌ خطأ: إعدادات قاعدة البيانات غير موجودة في ملف config.php\n";
    exit(1);
}

$dbConfig = $config['db'];
$host = $dbConfig['host'] ?? 'localhost';
$port = $dbConfig['port'] ?? 3306;
$dbname = $dbConfig['name'] ?? '';
$user = $dbConfig['user'] ?? '';
$pass = $dbConfig['pass'] ?? '';

// عرض الإعدادات (بدون كلمة المرور)
echo "إعدادات قاعدة البيانات:\n";
echo "   Host: " . ($host ?: 'غير محدد') . "\n";
echo "   Port: " . ($port ?: 'غير محدد') . "\n";
echo "   Database: " . ($dbname ?: 'غير محدد') . "\n";
echo "   User: " . ($user ?: 'غير محدد') . "\n";
echo "   Password: " . (empty($pass) ? '⚠️ فارغة أو غير موجودة!' : '✓ موجود (' . str_repeat('*', min(strlen($pass), 10)) . ')') . "\n\n";

if (empty($dbname) || empty($user)) {
    echo "❌ خطأ: إعدادات قاعدة البيانات غير مكتملة\n";
    echo "   يرجى التحقق من ملف config/config.php\n";
    exit(1);
}

if (empty($pass)) {
    echo "⚠️ تحذير: كلمة المرور فارغة. قد تفشل عملية الاتصال.\n";
    echo "   يرجى التحقق من ملف config/config.php وإضافة كلمة المرور في ['db']['pass']\n\n";
}

try {
    $dsn = "mysql:host=$host;port=$port;dbname=$dbname;charset=utf8mb4";
    
    echo "محاولة الاتصال بقاعدة البيانات...\n";
    echo "   Host: $host\n";
    echo "   Port: $port\n";
    echo "   Database: $dbname\n";
    echo "   User: $user\n";
    echo "   Password: " . (empty($pass) ? '⚠️ غير محدد!' : '✓ موجود') . "\n\n";
    
    $pdo = new PDO($dsn, $user, $pass, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    ]);
    
    echo "✓ تم الاتصال بقاعدة البيانات\n\n";
    
    // التحقق من وجود جدول roles
    $tables = $pdo->query("SHOW TABLES LIKE 'roles'")->fetchAll();
    if (empty($tables)) {
        echo "✗ جدول roles غير موجود. جاري إنشاؤه...\n";
        $pdo->exec("CREATE TABLE roles (
            id INT AUTO_INCREMENT PRIMARY KEY,
            name VARCHAR(100) NOT NULL,
            created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
        echo "✓ تم إنشاء جدول roles\n\n";
    } else {
        echo "✓ جدول roles موجود\n\n";
    }
    
    // التحقق من وجود دور Administrator
    $stmt = $pdo->prepare('SELECT id, name FROM roles WHERE name = ? LIMIT 1');
    $stmt->execute(['Administrator']);
    $role = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if ($role) {
        echo "✓ دور Administrator موجود (ID: {$role['id']})\n";
    } else {
        echo "✗ دور Administrator غير موجود. جاري إنشاؤه...\n";
        
        // محاولة إنشاء الدور بمعرف 1
        try {
            $pdo->exec("INSERT INTO roles (id, name) VALUES (1, 'Administrator')");
            echo "✓ تم إنشاء دور Administrator بمعرف 1\n";
        } catch (PDOException $e) {
            // إذا فشل (ربما المعرف 1 مستخدم)، أنشئه بدون معرف
            $pdo->prepare('INSERT INTO roles (name) VALUES (?)')->execute(['Administrator']);
            $newId = (int)$pdo->lastInsertId();
            echo "✓ تم إنشاء دور Administrator بمعرف $newId\n";
        }
    }
    
    // عرض جميع الأدوار الموجودة
    echo "\nالأدوار الموجودة في النظام:\n";
    echo str_repeat("-", 50) . "\n";
    $allRoles = $pdo->query('SELECT id, name, created_at FROM roles ORDER BY id')->fetchAll(PDO::FETCH_ASSOC);
    foreach ($allRoles as $r) {
        echo "ID: {$r['id']} | Name: {$r['name']} | Created: {$r['created_at']}\n";
    }
    
    echo "\n✅ تم إصلاح جدول roles بنجاح!\n";
    
} catch (PDOException $e) {
    $errorCode = $e->getCode();
    $errorMessage = $e->getMessage();
    
    echo "❌ خطأ في الاتصال بقاعدة البيانات:\n";
    echo "   " . $errorMessage . "\n\n";
    
    if ($errorCode == 1045) {
        echo "🔧 الحلول المقترحة:\n";
        echo "   1. تحقق من كلمة المرور في ملف config/config.php\n";
        echo "   2. تأكد من أن المستخدم '$user' موجود في MySQL\n";
        echo "   3. تحقق من صلاحيات المستخدم:\n";
        echo "      GRANT ALL PRIVILEGES ON $dbname.* TO '$user'@'localhost';\n";
        echo "      FLUSH PRIVILEGES;\n";
    } elseif ($errorCode == 1049) {
        echo "🔧 الحل: قم بإنشاء قاعدة البيانات '$dbname' أولاً\n";
    } elseif ($errorCode == 2002) {
        echo "🔧 الحل: تحقق من إعدادات Host في config.php (جرب '127.0.0.1' بدلاً من 'localhost')\n";
    }
    
    exit(1);
} catch (Throwable $e) {
    echo "❌ خطأ غير متوقع: " . $e->getMessage() . "\n";
    echo "   File: " . $e->getFile() . "\n";
    echo "   Line: " . $e->getLine() . "\n";
    exit(1);
}
