<?php
/**
 * API: تحديث حالة طلب المشرف (للمدير فقط)
 * POST /api/admin/endpoints/update_supervisor_application.php
 */

header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, OPTIONS');

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit();
}

// إعدادات الاتصال بقاعدة البيانات
$host = "localhost";
$dbname = "digitals_autotester_db";
$username = "digitals";
$password = "bassam.bassam";

$input = json_decode(file_get_contents('php://input'), true);

if (!$input || !isset($input['application_id']) || !isset($input['status'])) {
    echo json_encode(['success' => false, 'message' => 'بيانات غير مكتملة']);
    exit;
}

$applicationId = (int)$input['application_id'];
$status = $input['status'];
$notes = $input['notes'] ?? null;
$centerIds = $input['center_ids'] ?? [];
$permissions = $input['permissions'] ?? [];

$allowedStatuses = ['pending', 'reviewed', 'interview', 'accepted', 'rejected'];

if (!in_array($status, $allowedStatuses)) {
    echo json_encode(['success' => false, 'message' => 'حالة غير صالحة']);
    exit;
}

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    $pdo->beginTransaction();
    
    // جلب بيانات الطلب
    $getApp = $pdo->prepare("SELECT user_id, full_name, email FROM supervisors WHERE id = ?");
    $getApp->execute([$applicationId]);
    $application = $getApp->fetch(PDO::FETCH_ASSOC);
    
    if (!$application) {
        $pdo->rollBack();
        echo json_encode(['success' => false, 'message' => 'الطلب غير موجود']);
        exit;
    }
    
    $userId = $application['user_id'];
    
    // تحديث حالة الطلب في جدول supervisors
    $updateQuery = "UPDATE supervisors SET status = :status, updated_at = NOW()";
    $params = [':status' => $status, ':id' => $applicationId];
    
    if ($notes) {
        $updateQuery .= ", admin_notes = :notes";
        $params[':notes'] = $notes;
    }
    
    $updateQuery .= " WHERE id = :id";
    $stmt = $pdo->prepare($updateQuery);
    $stmt->execute($params);
    
    // إذا تم القبول، تحديث دور المستخدم وإضافة الصلاحيات
    if ($status === 'accepted') {
        // تحديث دور المستخدم
        $updateUser = $pdo->prepare("UPDATE users SET role = 'supervisor', is_active = 1, updated_at = NOW() WHERE id = ?");
        $updateUser->execute([$userId]);
        
        // إضافة المراكز المخصصة للمشرف
        if (!empty($centerIds)) {
            // التحقق من وجود جدول supervisor_centers
            $tableCheck = $pdo->query("SHOW TABLES LIKE 'supervisor_centers'")->rowCount();
            if ($tableCheck == 0) {
                $createTable = "CREATE TABLE IF NOT EXISTS `supervisor_centers` (
                    `id` INT AUTO_INCREMENT PRIMARY KEY,
                    `supervisor_id` INT NOT NULL,
                    `center_id` INT NOT NULL,
                    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
                    FOREIGN KEY (`supervisor_id`) REFERENCES `users`(`id`) ON DELETE CASCADE,
                    FOREIGN KEY (`center_id`) REFERENCES `inspection_centers`(`id`) ON DELETE CASCADE,
                    UNIQUE KEY `unique_supervisor_center` (`supervisor_id`, `center_id`)
                ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci";
                $pdo->exec($createTable);
            }
            
            // حذف المراكز القديمة
            $deleteOld = $pdo->prepare("DELETE FROM supervisor_centers WHERE supervisor_id = ?");
            $deleteOld->execute([$userId]);
            
            // إضافة المراكز الجديدة
            $insertCenter = $pdo->prepare("INSERT INTO supervisor_centers (supervisor_id, center_id) VALUES (?, ?)");
            foreach ($centerIds as $centerId) {
                $insertCenter->execute([$userId, $centerId]);
            }
        }
        
        // إضافة الصلاحيات
        if (!empty($permissions)) {
            // التحقق من وجود جدول supervisor_permissions
            $permTableCheck = $pdo->query("SHOW TABLES LIKE 'supervisor_permissions'")->rowCount();
            if ($permTableCheck == 0) {
                $createPermTable = "CREATE TABLE IF NOT EXISTS `supervisor_permissions` (
                    `id` INT AUTO_INCREMENT PRIMARY KEY,
                    `supervisor_id` INT NOT NULL,
                    `permission_key` VARCHAR(100) NOT NULL,
                    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
                    FOREIGN KEY (`supervisor_id`) REFERENCES `users`(`id`) ON DELETE CASCADE,
                    UNIQUE KEY `unique_supervisor_permission` (`supervisor_id`, `permission_key`)
                ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci";
                $pdo->exec($createPermTable);
            }
            
            // حذف الصلاحيات القديمة
            $deleteOldPerm = $pdo->prepare("DELETE FROM supervisor_permissions WHERE supervisor_id = ?");
            $deleteOldPerm->execute([$userId]);
            
            // إضافة الصلاحيات الجديدة
            $insertPerm = $pdo->prepare("INSERT INTO supervisor_permissions (supervisor_id, permission_key) VALUES (?, ?)");
            foreach ($permissions as $perm) {
                $insertPerm->execute([$userId, $perm]);
            }
        }
        
        // إضافة إشعار للمشرف
        $notifTableCheck = $pdo->query("SHOW TABLES LIKE 'notifications'")->rowCount();
        if ($notifTableCheck > 0) {
            $notifStmt = $pdo->prepare("INSERT INTO notifications (user_id, title, message, type, created_at) VALUES (?, ?, ?, 'success', NOW())");
            $notifStmt->execute([
                $userId,
                '🎉 تم قبول طلبك',
                'تم قبول طلب التسجيل كمشرف فني. يمكنك الآن تسجيل الدخول والبدء في مهامك.'
            ]);
        }
    }
    
    // إذا تم الرفض، تحديث دور المستخدم
    if ($status === 'rejected') {
        $updateUser = $pdo->prepare("UPDATE users SET role = 'client', is_active = 0 WHERE id = ?");
        $updateUser->execute([$userId]);
        
        // إضافة إشعار للمشرف
        $notifTableCheck = $pdo->query("SHOW TABLES LIKE 'notifications'")->rowCount();
        if ($notifTableCheck > 0) {
            $notifStmt = $pdo->prepare("INSERT INTO notifications (user_id, title, message, type, created_at) VALUES (?, ?, ?, 'error', NOW())");
            $notifStmt->execute([
                $userId,
                '❌ تم رفض طلبك',
                'نأسف لإبلاغك بأن طلب التسجيل كمشرف فني لم يتم قبوله. ' . ($notes ? 'السبب: ' . $notes : '')
            ]);
        }
    }
    
    $pdo->commit();
    
    echo json_encode([
        'success' => true,
        'message' => 'تم تحديث حالة الطلب بنجاح',
        'data' => [
            'application_id' => $applicationId,
            'user_id' => $userId,
            'status' => $status
        ]
    ], JSON_UNESCAPED_UNICODE);
    
} catch(PDOException $e) {
    if (isset($pdo)) $pdo->rollBack();
    error_log("Database error: " . $e->getMessage());
    echo json_encode([
        'success' => false,
        'message' => 'Database error: ' . $e->getMessage()
    ], JSON_UNESCAPED_UNICODE);
}
?>