<?php
/**
 * API لإدارة المستخدمين - نسخة معدلة للتعامل مع البيانات الموجودة
 */

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

// إعدادات قاعدة البيانات
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', '');
define('DB_NAME', 'auto_tester');

function getDBConnection() {
    try {
        $conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
        $conn->set_charset("utf8mb4");
        if ($conn->connect_error) {
            throw new Exception("Connection failed: " . $conn->connect_error);
        }
        return $conn;
    } catch (Exception $e) {
        sendError("Database connection failed: " . $e->getMessage());
        exit;
    }
}

function sendSuccess($data = null, $message = "Success") {
    echo json_encode([
        'success' => true,
        'message' => $message,
        'data' => $data
    ], JSON_UNESCAPED_UNICODE);
    exit;
}

function sendError($message, $code = 400) {
    http_response_code($code);
    echo json_encode([
        'success' => false,
        'message' => $message
    ], JSON_UNESCAPED_UNICODE);
    exit;
}

// التحقق من صلاحيات المدير (مبسط للاختبار)
function checkAdminAuth() {
    session_start();
    if (isset($_SESSION['user_id']) && isset($_SESSION['user_role'])) {
        if ($_SESSION['user_role'] === 'admin' || $_SESSION['user_role'] === 'supervisor') {
            return true;
        }
    }
    // للاختبار - إرجاع true
    return true;
}

// الحصول على إحصائيات المستخدمين
function getStats($conn) {
    $stats = [];
    
    $result = $conn->query("SELECT COUNT(*) as total FROM users");
    $stats['total_users'] = $result->fetch_assoc()['total'];
    
    $result = $conn->query("SELECT COUNT(*) as total FROM users WHERE is_active = 1");
    $stats['active_users'] = $result->fetch_assoc()['total'];
    
    $result = $conn->query("SELECT COUNT(*) as total FROM users WHERE is_active = 0");
    $stats['inactive_users'] = $result->fetch_assoc()['total'];
    
    $result = $conn->query("SELECT COUNT(*) as total FROM users WHERE role = 'admin'");
    $stats['admin_count'] = $result->fetch_assoc()['total'];
    
    return $stats;
}

// الحصول على قائمة المستخدمين - متوافق مع البيانات الموجودة
function getAllUsers($conn) {
    // التحقق من وجود عمود username
    $columns = [];
    $colResult = $conn->query("SHOW COLUMNS FROM users");
    while ($col = $colResult->fetch_assoc()) {
        $columns[] = $col['Field'];
    }
    
    // بناء الاستعلام حسب الأعمدة الموجودة
    $selectFields = [];
    $availableFields = ['id', 'username', 'full_name', 'email', 'phone', 'role', 
                        'governorate', 'area', 'address', 'backup_phone', 
                        'relationship', 'profile_image', 'request_number', 
                        'permissions', 'last_login', 'updated_at', 'is_active', 'created_at'];
    
    foreach ($availableFields as $field) {
        if (in_array($field, $columns)) {
            $selectFields[] = $field;
        }
    }
    
    $sql = "SELECT " . implode(", ", $selectFields) . " FROM users ORDER BY created_at DESC";
    $result = $conn->query($sql);
    
    if (!$result) {
        sendError("خطأ في الاستعلام: " . $conn->error);
    }
    
    $users = [];
    while ($row = $result->fetch_assoc()) {
        // تنظيف البيانات
        if (isset($row['is_active'])) {
            $row['is_active'] = (int)$row['is_active'];
        } else {
            $row['is_active'] = 1;
        }
        
        // التأكد من وجود full_name
        if (empty($row['full_name']) && !empty($row['email'])) {
            $row['full_name'] = $row['email'];
        }
        
        $users[] = $row;
    }
    
    return $users;
}

// إضافة مستخدم جديد
function addUser($conn, $data) {
    $required = ['full_name', 'email', 'phone', 'password', 'role'];
    foreach ($required as $field) {
        if (empty($data[$field])) {
            sendError("الحقل $field مطلوب");
        }
    }
    
    // التحقق من عدم تكرار البريد
    $stmt = $conn->prepare("SELECT id FROM users WHERE email = ?");
    $stmt->bind_param("s", $data['email']);
    $stmt->execute();
    if ($stmt->get_result()->num_rows > 0) {
        sendError("البريد الإلكتروني مسجل بالفعل");
    }
    
    $hashedPassword = password_hash($data['password'], PASSWORD_DEFAULT);
    
    // استخدام username إذا وجد أو استخدام البريد
    $username = !empty($data['username']) ? $data['username'] : explode('@', $data['email'])[0];
    
    $sql = "INSERT INTO users (username, full_name, email, phone, password, role, governorate, is_active, created_at) 
            VALUES (?, ?, ?, ?, ?, ?, ?, 1, NOW())";
    
    $stmt = $conn->prepare($sql);
    $governorate = $data['governorate'] ?? null;
    
    $stmt->bind_param("sssssss", 
        $username, 
        $data['full_name'], 
        $data['email'], 
        $data['phone'], 
        $hashedPassword, 
        $data['role'], 
        $governorate
    );
    
    if ($stmt->execute()) {
        return ['id' => $conn->insert_id, 'message' => 'User added successfully'];
    } else {
        sendError("فشل إضافة المستخدم: " . $stmt->error);
    }
}

// تغيير حالة المستخدم
function toggleUserStatus($conn, $data) {
    if (empty($data['user_id']) || !isset($data['is_active'])) {
        sendError("معرف المستخدم والحالة مطلوبان");
    }
    
    $userId = (int)$data['user_id'];
    $isActive = (int)$data['is_active'];
    
    $stmt = $conn->prepare("UPDATE users SET is_active = ? WHERE id = ?");
    $stmt->bind_param("ii", $isActive, $userId);
    
    if ($stmt->execute()) {
        return ['success' => true, 'message' => 'تم تحديث حالة المستخدم'];
    } else {
        sendError("فشل تحديث حالة المستخدم: " . $stmt->error);
    }
}

// إعادة تعيين كلمة المرور
function resetPassword($conn, $data) {
    if (empty($data['user_id']) || empty($data['password'])) {
        sendError("معرف المستخدم وكلمة المرور مطلوبان");
    }
    
    $userId = (int)$data['user_id'];
    $hashedPassword = password_hash($data['password'], PASSWORD_DEFAULT);
    
    $stmt = $conn->prepare("UPDATE users SET password = ? WHERE id = ?");
    $stmt->bind_param("si", $hashedPassword, $userId);
    
    if ($stmt->execute()) {
        return ['success' => true, 'message' => 'تم تغيير كلمة المرور بنجاح'];
    } else {
        sendError("فشل تغيير كلمة المرور: " . $stmt->error);
    }
}

// حذف مستخدم
function deleteUser($conn, $data) {
    if (empty($data['user_id'])) {
        sendError("معرف المستخدم مطلوب");
    }
    
    $userId = (int)$data['user_id'];
    
    $stmt = $conn->prepare("DELETE FROM users WHERE id = ?");
    $stmt->bind_param("i", $userId);
    
    if ($stmt->execute()) {
        return ['success' => true, 'message' => 'تم حذف المستخدم بنجاح'];
    } else {
        sendError("فشل حذف المستخدم: " . $stmt->error);
    }
}

// معالجة الطلبات
if (!checkAdminAuth()) {
    sendError("غير مصرح بالوصول", 401);
}

$conn = getDBConnection();
$action = isset($_GET['action']) ? $_GET['action'] : '';
$inputData = json_decode(file_get_contents('php://input'), true);
if (!$inputData && ($_SERVER['REQUEST_METHOD'] === 'POST' || $_SERVER['REQUEST_METHOD'] === 'DELETE')) {
    $inputData = $_POST;
}

try {
    switch ($action) {
        case 'stats':
            $stats = getStats($conn);
            sendSuccess($stats);
            break;
            
        case 'users':
            if ($_SERVER['REQUEST_METHOD'] === 'GET') {
                $users = getAllUsers($conn);
                sendSuccess($users);
            } else {
                sendError("Method not allowed", 405);
            }
            break;
            
        case 'add-user':
            if ($_SERVER['REQUEST_METHOD'] === 'POST') {
                $result = addUser($conn, $inputData);
                sendSuccess($result, "تم إضافة المستخدم بنجاح");
            } else {
                sendError("Method not allowed", 405);
            }
            break;
            
        case 'toggle-status':
            if ($_SERVER['REQUEST_METHOD'] === 'POST') {
                $result = toggleUserStatus($conn, $inputData);
                sendSuccess($result, $result['message']);
            } else {
                sendError("Method not allowed", 405);
            }
            break;
            
        case 'reset-password':
            if ($_SERVER['REQUEST_METHOD'] === 'POST') {
                $result = resetPassword($conn, $inputData);
                sendSuccess($result, $result['message']);
            } else {
                sendError("Method not allowed", 405);
            }
            break;
            
        case 'delete-user':
            if ($_SERVER['REQUEST_METHOD'] === 'DELETE' || $_SERVER['REQUEST_METHOD'] === 'POST') {
                $result = deleteUser($conn, $inputData);
                sendSuccess($result, $result['message']);
            } else {
                sendError("Method not allowed", 405);
            }
            break;
            
        default:
            sendError("إجراء غير معروف: " . $action, 400);
            break;
    }
} catch (Exception $e) {
    sendError("خطأ في الخادم: " . $e->getMessage(), 500);
}

$conn->close();
?>