<?php
// /home/transubd/public_html/api.transub.dz/apiparkgare/update_ticket.php
require_once 'config/database.php';

try {
    // Récupérer les données
    $input = file_get_contents('php://input');
    $data = json_decode($input, true);
    
    if (empty($data)) {
        jsonResponse(false, 'Aucune donnée reçue', [], 400);
    }
    
    // Validation
    $errors = validateInput($data, ['session_token', 'user_code', 'action', 'ticket_data']);
    if (!empty($errors)) {
        jsonResponse(false, implode(', ', $errors), [], 400);
    }
    
    $session_token = $data['session_token'];
    $user_code = $data['user_code'];
    $action = $data['action']; // 'UPDATE_PRICE' ou 'CANCEL_TICKET'
    $ticket_data = $data['ticket_data'];
    
    $db = Database::getInstance();
    $conn = $db->getConnection();
    
    // Vérifier la session
    $session_sql = "SELECT s.* FROM Sessions s
                   WHERE s.jeton = ? 
                   AND s.code_utilisateur = ?
                   AND s.statut = 'ACTIVE'
                   AND s.date_expiration > NOW()";
    
    $session_stmt = $db->executeQuery($session_sql, [$session_token, $user_code]);
    if ($session_stmt->get_result()->num_rows === 0) {
        $session_stmt->close();
        jsonResponse(false, 'Session invalide ou expirée', [], 403);
    }
    $session_stmt->close();
    
    // Démarrer la transaction
    $conn->begin_transaction();
    
    try {
        if ($action == 'UPDATE_PRICE') {
            // Mettre à jour le prix d'un ticket
            $ticket_number = $ticket_data['numero_ticket'];
            $new_price = $ticket_data['nouveau_prix'];
            $reason = $ticket_data['raison'] ?? 'Ajustement de prix';
            
            $update_sql = "UPDATE Tickets_Parking 
                          SET prix = ?
                          WHERE numero_ticket = ? 
                          AND code_utilisateur = ?";
            
            $update_stmt = $conn->prepare($update_sql);
            $update_stmt->bind_param("dss", $new_price, $ticket_number, $user_code);
            $update_stmt->execute();
            $rows_affected = $update_stmt->affected_rows;
            $update_stmt->close();
            
            if ($rows_affected > 0) {
                // Journaliser la modification
                $log_sql = "INSERT INTO SystemLogs 
                           (date_heure, type, code_utilisateur, SiteID, description, statut)
                           SELECT NOW(), 'SYNC', ?, SiteID, ?, 'SUCCES'
                           FROM Utilisateurs WHERE code_utilisateur = ?";
                
                $description = "Ticket $ticket_number modifié: nouveau prix = $new_price DA. Raison: $reason";
                $log_stmt = $conn->prepare($log_sql);
                $log_stmt->bind_param("sss", $user_code, $description, $user_code);
                $log_stmt->execute();
                $log_stmt->close();
                
                $message = "Prix du ticket $ticket_number mis à jour avec succès";
            } else {
                $message = "Aucun ticket trouvé ou vous n'êtes pas autorisé à modifier ce ticket";
            }
            
        } elseif ($action == 'CANCEL_TICKET') {
            // Annuler un ticket
            $ticket_number = $ticket_data['numero_ticket'];
            $reason = $ticket_data['raison'] ?? 'Annulation client';
            
            // Marquer le ticket comme annulé (vous pouvez créer une colonne 'statut' dans la table)
            // Pour l'instant, on va le supprimer
            $delete_sql = "DELETE FROM Tickets_Parking 
                          WHERE numero_ticket = ? 
                          AND code_utilisateur = ?";
            
            $delete_stmt = $conn->prepare($delete_sql);
            $delete_stmt->bind_param("ss", $ticket_number, $user_code);
            $delete_stmt->execute();
            $rows_affected = $delete_stmt->affected_rows;
            $delete_stmt->close();
            
            if ($rows_affected > 0) {
                // Journaliser l'annulation
                $log_sql = "INSERT INTO SystemLogs 
                           (date_heure, type, code_utilisateur, SiteID, description, statut)
                           SELECT NOW(), 'SYNC', ?, SiteID, ?, 'SUCCES'
                           FROM Utilisateurs WHERE code_utilisateur = ?";
                
                $description = "Ticket $ticket_number annulé. Raison: $reason";
                $log_stmt = $conn->prepare($log_sql);
                $log_stmt->bind_param("sss", $user_code, $description, $user_code);
                $log_stmt->execute();
                $log_stmt->close();
                
                $message = "Ticket $ticket_number annulé avec succès";
            } else {
                $message = "Aucun ticket trouvé ou vous n'êtes pas autorisé à annuler ce ticket";
            }
        } else {
            throw new Exception("Action non reconnue: $action");
        }
        
        // Valider la transaction
        $conn->commit();
        
        jsonResponse(true, $message, [
            'action' => $action,
            'ticket_number' => $ticket_number ?? null,
            'rows_affected' => $rows_affected ?? 0,
            'timestamp' => date('Y-m-d H:i:s')
        ], 200);
        
    } catch (Exception $e) {
        $conn->rollback();
        throw $e;
    }
    
} catch (Exception $e) {
    jsonResponse(false, 'Erreur de mise à jour: ' . $e->getMessage(), [], 500);
}
?>