<?php
/**
 * API de connexion
 * POST /api/login
 */

require_once __DIR__ . '/../db.php';
require_once __DIR__ . '/../auth.php';

// Vérifier la méthode HTTP
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    http_response_code(405);
    echo json_encode([
        'success' => false,
        'message' => 'Méthode non autorisée'
    ]);
    exit;
}

// Récupérer les données JSON
$input = json_decode(file_get_contents('php://input'), true);

// Vérifier les champs obligatoires
if (!isset($input['matricule']) || !isset($input['password'])) {
    http_response_code(400);
    echo json_encode([
        'success' => false,
        'message' => 'Matricule et mot de passe requis'
    ]);
    exit;
}

$matricule = trim($input['matricule']);
$password = $input['password'];

try {
    $db = getDB();

    // Rechercher l'employé par matricule
    $stmt = $db->prepare("
        SELECT e.*, s.nom as site_nom
        FROM employees e
        LEFT JOIN sites s ON e.site_id = s.id
        WHERE e.matricule = :matricule AND e.actif = 1
    ");
    $stmt->execute(['matricule' => $matricule]);
    $employee = $stmt->fetch();

    // Vérifier si l'employé existe
    if (!$employee) {
        http_response_code(401);
        echo json_encode([
            'success' => false,
            'message' => 'Matricule ou mot de passe incorrect'
        ]);
        exit;
    }

    // Vérifier le mot de passe
    if (!password_verify($password, $employee['mot_de_passe'])) {
        http_response_code(401);
        echo json_encode([
            'success' => false,
            'message' => 'Matricule ou mot de passe incorrect'
        ]);
        exit;
    }

    // Vérifier que c'est un Admin
   if ($employee['role'] !== 'Admin') {
        http_response_code(403);
        echo json_encode([
            'success' => false,
            'message' => 'Accès réservé à l\'administrateur'
        ]);
        exit;
    }

    // Générer le token JWT
    $token = generateToken($employee['id'], $employee['matricule']);

    // Préparer les données de l'employé pour la réponse
    $responseEmployee = [
        'id' => (int)$employee['id'],
        'matricule' => $employee['matricule'],
        'nom' => $employee['nom'],
        'prenom' => $employee['prenom'],
        'nomprenom' => $employee['nomprenom'] ?? ($employee['nom'] . ' ' . $employee['prenom']),
        'role' => $employee['role'],
        'telephone' => $employee['telephone'],
        'photo_reference' => $employee['photo_reference'],
        'site_id' => $employee['site_id'] ? (int)$employee['site_id'] : null,
        'latitude_site' => $employee['latitude_site'] ? (float)$employee['latitude_site'] : null,
        'longitude_site' => $employee['longitude_site'] ? (float)$employee['longitude_site'] : null,
        'rayon_autorise' => (int)($employee['rayon_autorise'] ?? 100),
        'actif' => (bool)$employee['actif'],
        'site_nom' => $employee['site_nom']
    ];

    echo json_encode([
        'success' => true,
        'message' => 'Connexion réussie',
        'token' => $token,
        'employee' => $responseEmployee
    ]);

} catch (Exception $e) {
    error_log("Erreur login: " . $e->getMessage());
    http_response_code(500);
    echo json_encode([
        'success' => false,
        'message' => 'Erreur serveur'
    ]);
}
