<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With");
header("Content-Type: application/json; charset=UTF-8");

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

require_once $_SERVER['DOCUMENT_ROOT'] . '/backend/db_connection.php';
require_once 'auth_helper.php';
require_once 'role_check.php';

$token = getBearerToken();

if (!$token) {
    http_response_code(401);
    echo json_encode(["success" => false, "message" => "Authorization token required."]);
    exit;
}

try {
    // Vérifier la connexion à la base de données
    if (!$conn) {
        throw new PDOException("Database connection failed");
    }
    
    $roleCheck = checkUserRole($conn, $token, null, 'Superviseur');

    if (!$roleCheck['success']) {
        http_response_code($roleCheck['code']);
        echo json_encode(["success" => false, "message" => $roleCheck['message']]);
        exit;
    }

    $stmt = $conn->prepare("
        SELECT
            id,
            region,
            prefecture,
            commune,
            superviseur,
            email,
            type_compte,
            role,
            is_active,
            created_at,
            updated_at,
            last_login
        FROM apps_users
        ORDER BY region ASC, prefecture ASC, commune ASC, type_compte DESC, created_at DESC
    ");
    
    if (!$stmt->execute()) {
        throw new PDOException("Query execution failed");
    }
    
    $users = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    // S'assurer qu'on renvoie toujours une réponse valide
    if ($users === false) {
        $users = [];
    }

    http_response_code(200);
    $response = [
        "success" => true,
        "message" => "Users retrieved successfully.",
        "users" => $users
    ];
    
    $jsonResponse = json_encode($response, JSON_UNESCAPED_UNICODE);
    
    if ($jsonResponse === false) {
        throw new Exception("JSON encoding failed: " . json_last_error_msg());
    }
    
    echo $jsonResponse;

} catch (PDOException $e) {
    error_log("PDO Error in get_all_users.php: " . $e->getMessage());
    http_response_code(500);
    echo json_encode([
        "success" => false, 
        "message" => "Failed to retrieve users. Please try again later."
    ]);
} catch (Exception $e) {
    error_log("General Error in get_all_users.php: " . $e->getMessage());
    http_response_code(500);
    echo json_encode([
        "success" => false, 
        "message" => "An unexpected error occurred."
    ]);
}
?>
