<?php
header('Content-Type: text/plain; charset=utf-8');
header("HTTP/1.0 200 OK");

require_once 'config/database.php';

$code = isset($_REQUEST['code']) ? trim($_REQUEST['code']) : '';
$pass = isset($_REQUEST['pass']) ? trim($_REQUEST['pass']) : '';

if (empty($code) || empty($pass)) {
    echo json_encode(['success' => false, 'message' => 'Identifiants manquants']);
    exit;
}

try {
    // 1. Vérification utilisateur
    $stmt = $pdo->prepare("SELECT u.*, s.Nom_Site, s.Nom_SiteAR, s.IMEI as SiteIMEIs 
                          FROM Utilisateurs u 
                          JOIN Sites s ON u.SiteID = s.SiteID 
                          WHERE u.code_utilisateur = ? AND u.mot_de_passe = ?");
    $stmt->execute([$code, $pass]);
    $user = $stmt->fetch(PDO::FETCH_ASSOC);

    if (!$user) {
        // Log échec connexion
        $stmtLog = $pdo->prepare("INSERT INTO SystemLogs (date_heure, type, code_utilisateur, description, statut) VALUES (NOW(), 'LOGIN', ?, ?, 'ECHEC')");
        $stmtLog->execute([$code, "Tentative de connexion échouée: Code ou MDP incorrect"]);
        die("ERR|Code ou MDP incorrect");
    }

    $client_session_id = isset($_REQUEST['session_id']) ? trim($_REQUEST['session_id']) : '';

    // 2. Vérification autorisation IMEI pour le Site
    $siteIMEIs = isset($user['SiteIMEIs']) ? trim($user['SiteIMEIs']) : '';
    if (empty($siteIMEIs)) {
        // Si le champ IMEI est vide, aucun appareil n'est autorisé pour ce site
        $stmtLog = $pdo->prepare("INSERT INTO SystemLogs (date_heure, type, code_utilisateur, SiteID, description, statut) VALUES (NOW(), 'LOGIN', ?, ?, ?, 'ECHEC')");
        $stmtLog->execute([$code, $user['SiteID'], "Accès refusé: Aucun IMEI configuré pour ce site"]);
        die("ERR|Cet appareil n'est pas autorisé à être utilisé sur ce site");
    }

    $authorizedList = explode('/', $siteIMEIs);
    $isAuthorized = false;
    foreach ($authorizedList as $imei) {
        if (trim($imei) === $client_session_id) {
            $isAuthorized = true;
            break;
        }
    }
    if (!$isAuthorized) {
        $stmtLog = $pdo->prepare("INSERT INTO SystemLogs (date_heure, type, code_utilisateur, SiteID, description, statut) VALUES (NOW(), 'LOGIN', ?, ?, ?, 'ECHEC')");
        $stmtLog->execute([$code, $user['SiteID'], "Appareil non autorisé: " . $client_session_id]);
        die("ERR|Cet appareil n'est pas autorisé à être utilisé sur ce site");
    }

    if ($user['role'] !== 'Guichetier' && $user['role'] !== 'Adminsite') {
        $stmtLog = $pdo->prepare("INSERT INTO SystemLogs (date_heure, type, code_utilisateur, SiteID, description, statut) VALUES (NOW(), 'LOGIN', ?, ?, ?, 'ECHEC')");
        $stmtLog->execute([$code, $user['SiteID'], "Accès refusé: Rôle " . $user['role']]);
        die("ERR|Accès refusé: Rôle incorrect");
    }

    if ($user['statut'] !== 'ACTIF') {
        $stmtLog = $pdo->prepare("INSERT INTO SystemLogs (date_heure, type, code_utilisateur, SiteID, description, statut) VALUES (NOW(), 'LOGIN', ?, ?, ?, 'ECHEC')");
        $stmtLog->execute([$code, $user['SiteID'], "Compte bloqué ou inactif"]);
        die("ERR|Compte bloqué");
    }

    // 3. Vérification is_session_open 
    $has_tickets = isset($_REQUEST['has_tickets']) ? ($_REQUEST['has_tickets'] === '1') : false;
    
    if ($user['is_session_open'] === 'O') {
        if ($user['session_id'] !== $client_session_id) {
            $stmtLog = $pdo->prepare("INSERT INTO SystemLogs (date_heure, type, code_utilisateur, SiteID, description, statut) VALUES (NOW(), 'LOGIN', ?, ?, ?, 'ECHEC')");
            $stmtLog->execute([$code, $user['SiteID'], "Session déjà ouverte sur un autre appareil (TPE: " . $user['session_id'] . ")"]);
            die("ERR|Session déjà ouverte sur un autre appareil");
        }
    }

    // Format de réponse simple pour Java ME (CLDC 1.1)
    echo "OK|" . 
         $user['NomPrenom'] . "|" . 
         $user['NomPrenomAR'] . "|" . 
         $user['SiteID'] . "|" . 
         $user['Nom_Site'] . "|" . 
         $user['Nom_SiteAR'] . "|" . 
         $user['last_ticket_number'] . "|" .
         $user['is_session_open'] . "|" .
         $user['role'];

    // 3. Mise à jour de session et Logs
    $jeton = bin2hex(random_bytes(16));
    $ip = $_SERVER['REMOTE_ADDR'];

    // Mise à jour Utilisateurs
    $stmt = $pdo->prepare("UPDATE Utilisateurs SET is_session_open = 'O', session_id = ?, session_timestamp = NOW() WHERE code_utilisateur = ?");
    $stmt->execute([$client_session_id, $code]);

    // Insertion Session
    $stmtSess = $pdo->prepare("INSERT INTO Sessions (code_utilisateur, jeton, date_creation, date_expiration, ip_appareil, statut) VALUES (?, ?, NOW(), DATE_ADD(NOW(), INTERVAL 24 HOUR), ?, 'ACTIVE')");
    $stmtSess->execute([$code, $jeton, $ip]);

    // Log Succès
    $stmtLog = $pdo->prepare("INSERT INTO SystemLogs (date_heure, type, code_utilisateur, SiteID, description, statut) VALUES (NOW(), 'LOGIN', ?, ?, ?, 'SUCCES')");
    $stmtLog->execute([$code, $user['SiteID'], "Connexion réussie sur TPE: " . $client_session_id]);

} catch (Exception $e) {
    die("ERR|Erreur serveur");
}
?>
