<?php
// vista/ticket.php
// CONFIGURACIÓN Y CONEXIÓN
error_reporting(E_ALL);
ini_set('display_errors', 0); // Lo dejamos en 0 para producción, pero el código ya va blindado

if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

require_once "../modelo/Db.php";

try {
    $bd = new clsbdd();
} catch (Exception $e) {
    die("Error de conexión: " . $e->getMessage());
}

// Validar parámetros
$cxc_id = isset($_GET['id']) ? intval($_GET['id']) : 0;

if ($cxc_id === 0) {
    die("ID de comprobante no válido.");
}

// 1. OBTENER INFORMACIÓN PRINCIPAL DE LA VENTA
$sql_venta = "SELECT *, DATE_FORMAT(cxc_fecha_emision, '%d/%m/%Y %H:%i:%s') as fecha_formateada
              FROM bas_cuentas_cobrar 
              WHERE cxc_id = $cxc_id 
              LIMIT 1";

$res_venta = $bd->ejecutar_array($sql_venta);
if (!$res_venta || count($res_venta) === 0) {
    die("El comprobante solicitado no existe.");
}
$venta = $res_venta[0];

// Asegurar claves para evitar errores "Undefined array key" si difieren los nombres
$fecha_emision    = isset($venta['fecha_formateada']) ? $venta['fecha_formateada'] : date('d/m/Y H:i:s');
$estado_ticket    = isset($venta['cxc_estado']) ? $venta['cxc_estado'] : 'REGISTRADO';
$valor_base       = isset($venta['cxc_valor_base']) ? floatval($venta['cxc_valor_base']) : (isset($venta['cxc_total']) ? floatval($venta['cxc_total']) : 0.00);
$descuento        = isset($venta['cxc_descuento']) ? floatval($venta['cxc_descuento']) : 0.00;
$valor_final      = isset($venta['cxc_valor_final']) ? floatval($venta['cxc_valor_final']) : $valor_base;
$saldo_pendiente  = isset($venta['cxc_saldo_pendiente']) ? floatval($venta['cxc_saldo_pendiente']) : 0.00;

// 2. OBTENER DATOS DEL CLIENTE / ASOCIADO
$cliente_nombre = "CONSUMIDOR FINAL";
$cliente_tipo = "";
$bas_id = isset($venta['bas_id']) ? intval($venta['bas_id']) : 0;

if ($bas_id > 0) {
    // Controlamos mediante bloques try/catch individuales para que si falla una consulta por nombre de columna, no tumbe el ticket entero
    try {
        $res_bas = $bd->ejecutar_array("SELECT bas_nombre FROM bas_bastoneras WHERE bas_id = $bas_id LIMIT 1");
        if ($res_bas && count($res_bas) > 0 && isset($res_bas[0]['bas_nombre'])) {
            $cliente_nombre = $res_bas[0]['bas_nombre'];
            $cliente_tipo = " (ALUMNA)";
        } else {
            $res_prof = $bd->ejecutar_array("SELECT prof_nombre FROM bas_profesores WHERE prof_id = $bas_id LIMIT 1");
            if ($res_prof && count($res_prof) > 0 && isset($res_prof[0]['prof_nombre'])) {
                $cliente_nombre = $res_prof[0]['prof_nombre'];
                $cliente_tipo = " (PROFESOR)";
            }
        }
    } catch (Exception $e) {
        // Si las tablas de clientes fallan o cambian nombres, mantenemos el Consumidor Final de respaldo
        $cliente_nombre = "CLIENTE REGISTRADO (ID: $bas_id)";
    }
}

// 3. OBTENER LOS DETALLES DE LOS PRODUCTOS VENDIDOS
try {
    $sql_detalles = "SELECT d.*, p.pro_nombre 
                     FROM bas_venta_detalles d
                     INNER JOIN bas_productos p ON d.pro_id = p.pro_id
                     WHERE d.cxc_id = $cxc_id";
    $detalles = $bd->ejecutar_array($sql_detalles) ?: [];
} catch (Exception $e) {
    $detalles = [];
}

// 4. OBTENER LOS MÉTODOS DE PAGO REGISTRADOS
try {
    $sql_pagos = "SELECT * FROM bas_pagos WHERE cxc_id = $cxc_id";
    $pagos = $bd->ejecutar_array($sql_pagos) ?: [];
} catch (Exception $e) {
    $pagos = [];
}
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Ticket_<?= $cxc_id ?></title>
    <style>
        * {
            box-sizing: border-box;
            font-family: 'Courier New', Courier, monospace;
            font-size: 12px;
            color: #000;
        }
        body {
            margin: 0;
            padding: 10px;
            width: 80mm;
            background: #fff;
        }
        .text-center { text-align: center; }
        .text-right { text-align: right; }
        .bold { font-weight: bold; }
        .header {
            margin-bottom: 15px;
            line-height: 1.3;
        }
        .header h1 {
            font-size: 16px;
            margin: 0 0 5px 0;
            text-transform: uppercase;
        }
        .info-section {
            border-bottom: 1px dashed #000;
            padding-bottom: 8px;
            margin-bottom: 8px;
            line-height: 1.4;
        }
        table {
            width: 100%;
            border-collapse: collapse;
            margin-bottom: 8px;
        }
        th {
            border-bottom: 1px solid #000;
            text-align: left;
            padding: 4px 0;
            font-size: 11px;
        }
        td {
            padding: 5px 0;
            vertical-align: top;
            font-size: 11px;
        }
        .totals-table td {
            padding: 2px 0;
        }
        .footer {
            margin-top: 15px;
            font-size: 10px;
            line-height: 1.3;
        }
        @media print {
            body { padding: 0; width: 80mm; }
            @page { margin: 0; }
        }
    </style>
</head>
<body>

    <div class="header text-center">
        <h1>STAGE DANCE CLASS</h1>
        <p>PUNTO DE VENTA CENTRAL<br>
        Quito, Ecuador</p>
    </div>

    <div class="info-section">
        <span class="bold">TICKET:</span> #<?= str_pad($cxc_id, 6, "0", STR_PAD_LEFT) ?><br>
        <span class="bold">FECHA:</span> <?= htmlspecialchars($fecha_emision) ?><br>
        <span class="bold">ESTADO:</span> <?= htmlspecialchars($estado_ticket) ?><br>
        <span class="bold">CLIENTE:</span> <?= strtoupper(htmlspecialchars($cliente_nombre . $cliente_tipo)) ?>
    </div>

    <table>
        <thead>
            <tr>
                <th style="width: 15%; text-align: center;">CANT</th>
                <th style="width: 55%;">DESCRIPCIÓN</th>
                <th style="width: 30%; text-align: right;">TOTAL</th>
            </tr>
        </thead>
        <tbody>
            <?php if (count($detalles) > 0): ?>
                <?php foreach ($detalles as $d): 
                    $cant = isset($d['det_cantidad']) ? $d['det_cantidad'] : 1;
                    $prec = isset($d['det_precio_unitario']) ? floatval($d['det_precio_unitario']) : 0.00;
                    $subt = isset($d['det_subtotal']) ? floatval($d['det_subtotal']) : ($cant * $prec);
                ?>
                    <tr>
                        <td class="text-center"><?= $cant ?></td>
                        <td>
                            <?= htmlspecialchars(isset($d['pro_nombre']) ? $d['pro_nombre'] : 'Producto General') ?>
                            <br>
                            <span style="font-size: 10px; color: #555;">x$<?= number_format($prec, 2) ?></span>
                        </td>
                        <td class="text-right">$<?= number_format($subt, 2) ?></td>
                    </tr>
                <?php endforeach; ?>
            <?php else: ?>
                <tr>
                    <td class="text-center">1</td>
                    <td>Pago/Abono de Cuenta por Cobrar</td>
                    <td class="text-right">$<?= number_format($valor_final, 2) ?></td>
                </tr>
            <?php endif; ?>
        </tbody>
    </table>

    <table class="totals-table" style="border-top: 1px dashed #000; padding-top: 5px;">
        <tr>
            <td style="width: 60%;" class="text-right bold">SUBTOTAL:</td>
            <td style="width: 40%;" class="text-right">$<?= number_format($valor_base, 2) ?></td>
        </tr>
        <tr>
            <td class="text-right bold">DESCUENTO:</td>
            <td class="text-right">$<?= number_format($descuento, 2) ?></td>
        </tr>
        <tr>
            <td class="text-right bold" style="font-size: 13px;">TOTAL A PAGAR:</td>
            <td class="text-right bold" style="font-size: 13px;">$<?= number_format($valor_final, 2) ?></td>
        </tr>
        <?php if ($saldo_pendiente > 0): ?>
            <tr>
                <td class="text-right bold" style="color: red;">SALDO EN DEUDA:</td>
                <td class="text-right bold" style="color: red;">$<?= number_format($saldo_pendiente, 2) ?></td>
            </tr>
        <?php endif; ?>
    </table>

    <div class="info-section" style="border-top: 1px dashed #000; margin-top: 5px; padding-top: 5px;">
        <span class="bold">FORMAS DE PAGO REGISTRADAS:</span><br>
        <?php if (count($pagos) > 0): ?>
            <?php foreach ($pagos as $pago): 
                $metodo = isset($pago['pag_metodo']) ? $pago['pag_metodo'] : 'Efectivo';
                $monto  = isset($pago['pag_monto']) ? floatval($pago['pag_monto']) : 0.00;
                $hora   = isset($pago['pag_fecha']) ? date('H:i', strtotime($pago['pag_fecha'])) : date('H:i');
            ?>
                - <?= htmlspecialchars($metodo) ?>: $<?= number_format($monto, 2) ?> <span style="font-size: 9px;">(<?= $hora ?>)</span><br>
            <?php endforeach; ?>
        <?php else: ?>
            - CRÉDITO INTERNO / SIN ABONOS<br>
        <?php endif; ?>
    </div>

    <div class="footer text-center">
        <p><span class="bold">¡GRACIAS POR TU COMPRA!</span><br>
        Conserve su ticket para cualquier cambio.</p>
        <p style="font-size: 9px; color: #666;">Sistema POS - Stage Dance</p>
    </div>

    <script type="text/javascript">
        window.onload = function() {
            window.print();
        }
    </script>
</body>
</html>