<?php
/**
 * Test d'impression TPE P30 - Fichier indépendant
 *
 * Ce fichier permet de tester l'impression sur un TPE P30
 * indépendamment de l'application Android.
 *
 * Utilisation :
 * - Placer ce fichier dans votre répertoire API
 * - L'appeler depuis un navigateur : http://votre-domaine.com/api/test_print.php
 * - Ou utiliser un outil comme Postman avec les paramètres appropriés
 */

// Configuration de test
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');

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

// Fonction de simulation d'impression TPE
function simulateTPEPrint($ticketData) {
    // Simuler le processus d'impression TPE

    $steps = [
        "1. Initialisation de l'imprimante TPE...",
        "2. Vérification de l'état de l'imprimante...",
        "3. Formatage du contenu du ticket...",
        "4. Envoi des commandes ESC/POS...",
        "5. Impression du ticket...",
        "6. Coupe automatique du papier...",
        "7. Fermeture de la connexion imprimante..."
    ];

    $response = [
        "success" => true,
        "message" => "Impression TPE simulée avec succès",
        "ticket_data" => $ticketData,
        "simulation_steps" => $steps,
        "timestamp" => date('Y-m-d H:i:s'),
        "printer_status" => "READY",
        "paper_cut" => true
    ];

    return $response;
}

// Fonction pour générer un exemple de ticket
function generateTestTicket() {
    $ticketNumber = "TEST" . date('His');
    $dateTime = date('Y-m-d H:i:s');
    $price = rand(10, 200); // Prix aléatoire entre 10 et 200
    $types = ["Taxi", "Bus", "Bus urbain", "Voiture particulière"];
    $designation = $types[array_rand($types)];

    return [
        "numero_ticket" => $ticketNumber,
        "date_heure" => $dateTime,
        "prix" => $price,
        "designation" => $designation,
        "code_utilisateur" => "TEST01",
        "site_id" => "TEST",
        "gare" => "Test Station",
        "agent" => "Test Agent"
    ];
}

// Fonction pour formater le contenu du ticket
function formatTicketContent($ticketData) {
    $separator = "================================\n";
    $shortSeparator = "--------------------------------\n";

    $content = $separator;
    $content .= "           PARKGARE\n";
    $content .= "     Système de Parking\n";
    $content .= $separator;
    $content .= "Numéro: " . $ticketData['numero_ticket'] . "\n";
    $content .= "Date: " . $ticketData['date_heure'] . "\n";
    $content .= "Type: " . $ticketData['designation'] . "\n";
    $content .= "Prix: " . number_format($ticketData['prix'], 2, ',', ' ') . " DA\n";
    $content .= $shortSeparator;
    $content .= "Gare: " . $ticketData['gare'] . "\n";
    $content .= "Agent: " . $ticketData['agent'] . "\n";
    $content .= $shortSeparator;
    $content .= "Merci pour votre visite!\n";
    $content .= "Conservez ce ticket\n";
    $content .= $separator;

    return $content;
}

try {
    // Récupération des paramètres (GET ou POST)
    $ticketNumber = $_REQUEST['numero_ticket'] ?? '';
    $dateTime = $_REQUEST['date_heure'] ?? '';
    $prix = $_REQUEST['prix'] ?? '';
    $designation = $_REQUEST['designation'] ?? '';
    $codeUtilisateur = $_REQUEST['code_utilisateur'] ?? '';
    $siteId = $_REQUEST['site_id'] ?? '';
    $gare = $_REQUEST['gare'] ?? '';
    $agent = $_REQUEST['agent'] ?? '';

    // Si aucun paramètre fourni, générer un ticket de test
    if (empty($ticketNumber)) {
        $ticketData = generateTestTicket();
        $isTestMode = true;
    } else {
        $ticketData = [
            "numero_ticket" => $ticketNumber,
            "date_heure" => $dateTime,
            "prix" => floatval($prix),
            "designation" => $designation,
            "code_utilisateur" => $codeUtilisateur,
            "site_id" => $siteId,
            "gare" => $gare,
            "agent" => $agent
        ];
        $isTestMode = false;
    }

    // Formater le contenu du ticket
    $ticketContent = formatTicketContent($ticketData);

    // Simuler l'impression TPE
    $printResult = simulateTPEPrint($ticketData);

    // Ajouter le contenu formaté au résultat
    $printResult['ticket_content'] = $ticketContent;
    $printResult['test_mode'] = $isTestMode;

    // Log pour débogage
    error_log("Test impression TPE - Ticket: " . $ticketData['numero_ticket'] . " - Succès: " . ($printResult['success'] ? 'OUI' : 'NON'));

    // Retourner la réponse JSON
    echo json_encode($printResult, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

} catch (Exception $e) {
    error_log("Erreur test impression TPE: " . $e->getMessage());

    echo json_encode([
        "success" => false,
        "message" => "Erreur lors du test d'impression: " . $e->getMessage(),
        "error_details" => $e->getTraceAsString(),
        "timestamp" => date('Y-m-d H:i:s')
    ], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
}
?>

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Test Impression TPE P30</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            max-width: 800px;
            margin: 0 auto;
            padding: 20px;
            background-color: #f5f5f5;
        }
        .container {
            background: white;
            padding: 20px;
            border-radius: 8px;
            box-shadow: 0 2px 10px rgba(0,0,0,0.1);
        }
        h1 {
            color: #333;
            text-align: center;
        }
        .form-group {
            margin-bottom: 15px;
        }
        label {
            display: block;
            margin-bottom: 5px;
            font-weight: bold;
        }
        input[type="text"], input[type="number"] {
            width: 100%;
            padding: 8px;
            border: 1px solid #ddd;
            border-radius: 4px;
            font-size: 14px;
        }
        .btn {
            background-color: #007bff;
            color: white;
            padding: 10px 20px;
            border: none;
            border-radius: 4px;
            cursor: pointer;
            font-size: 16px;
            margin: 5px;
        }
        .btn:hover {
            background-color: #0056b3;
        }
        .btn-secondary {
            background-color: #6c757d;
        }
        .btn-secondary:hover {
            background-color: #545b62;
        }
        .result {
            margin-top: 20px;
            padding: 15px;
            border-radius: 4px;
            white-space: pre-wrap;
            font-family: monospace;
            background-color: #f8f9fa;
            border: 1px solid #dee2e6;
        }
        .success {
            border-color: #28a745;
            background-color: #d4edda;
            color: #155724;
        }
        .error {
            border-color: #dc3545;
            background-color: #f8d7da;
            color: #721c24;
        }
        .ticket-preview {
            background-color: #f8f9fa;
            border: 1px solid #dee2e6;
            padding: 15px;
            margin: 10px 0;
            font-family: monospace;
            white-space: pre-wrap;
            border-radius: 4px;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>🖨️ Test Impression TPE P30</h1>

        <p><strong>Instructions :</strong></p>
        <ul>
            <li>Laissez les champs vides pour générer un ticket de test automatique</li>
            <li>Ou remplissez les champs pour tester avec vos propres données</li>
            <li>Cliquez sur "Tester Impression" pour simuler l'impression TPE</li>
        </ul>

        <form id="printForm">
            <div class="form-group">
                <label for="numero_ticket">Numéro de ticket :</label>
                <input type="text" id="numero_ticket" name="numero_ticket" placeholder="Laisser vide pour test auto">
            </div>

            <div class="form-group">
                <label for="prix">Prix (DA) :</label>
                <input type="number" id="prix" name="prix" step="0.01" placeholder="Laisser vide pour test auto">
            </div>

            <div class="form-group">
                <label for="designation">Type de véhicule :</label>
                <input type="text" id="designation" name="designation" placeholder="Taxi, Bus, etc.">
            </div>

            <div class="form-group">
                <label for="code_utilisateur">Code utilisateur :</label>
                <input type="text" id="code_utilisateur" name="code_utilisateur" placeholder="Code de l'agent">
            </div>

            <div class="form-group">
                <label for="gare">Nom de la gare :</label>
                <input type="text" id="gare" name="gare" placeholder="Nom de la station">
            </div>

            <div class="form-group">
                <label for="agent">Nom de l'agent :</label>
                <input type="text" id="agent" name="agent" placeholder="Nom de l'agent">
            </div>

            <button type="button" class="btn" onclick="testPrint()">Tester Impression</button>
            <button type="button" class="btn btn-secondary" onclick="clearForm()">Effacer</button>
        </form>

        <div id="result" class="result" style="display: none;"></div>
    </div>

    <script>
        async function testPrint() {
            const formData = new FormData(document.getElementById('printForm'));
            const params = new URLSearchParams();

            for (let [key, value] of formData.entries()) {
                if (value.trim() !== '') {
                    params.append(key, value);
                }
            }

            try {
                const response = await fetch(window.location.href, {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/x-www-form-urlencoded',
                    },
                    body: params.toString()
                });

                const result = await response.json();
                displayResult(result);

            } catch (error) {
                displayResult({
                    success: false,
                    message: 'Erreur de connexion: ' + error.message
                });
            }
        }

        function displayResult(result) {
            const resultDiv = document.getElementById('result');
            resultDiv.style.display = 'block';

            if (result.success) {
                resultDiv.className = 'result success';
                let html = `<strong>✅ ${result.message}</strong>\n\n`;

                if (result.test_mode) {
                    html += `<strong>Mode test automatique activé</strong>\n\n`;
                }

                html += `<strong>Données du ticket :</strong>\n`;
                html += `• Numéro: ${result.ticket_data.numero_ticket}\n`;
                html += `• Date: ${result.ticket_data.date_heure}\n`;
                html += `• Prix: ${result.ticket_data.prix} DA\n`;
                html += `• Type: ${result.ticket_data.designation}\n`;
                html += `• Agent: ${result.ticket_data.code_utilisateur}\n`;
                html += `• Gare: ${result.ticket_data.gare}\n\n`;

                html += `<strong>Contenu du ticket imprimé :</strong>\n`;
                html += `<div class="ticket-preview">${result.ticket_content}</div>\n`;

                html += `<strong>Étapes de simulation :</strong>\n`;
                result.simulation_steps.forEach(step => {
                    html += `• ${step}\n`;
                });

                html += `\n<strong>Statut :</strong> ${result.printer_status}\n`;
                html += `<strong>Coupe papier :</strong> ${result.paper_cut ? 'Oui' : 'Non'}\n`;
                html += `<strong>Timestamp :</strong> ${result.timestamp}`;

                resultDiv.innerHTML = html;
            } else {
                resultDiv.className = 'result error';
                resultDiv.innerHTML = `<strong>❌ ${result.message}</strong>\n\n${result.error_details || ''}`;
            }
        }

        function clearForm() {
            document.getElementById('printForm').reset();
            document.getElementById('result').style.display = 'none';
        }

        // Test automatique au chargement de la page
        window.onload = function() {
            // Optionnel : auto-test au chargement
            // testPrint();
        };
    </script>
</body>
</html>
