<?php
session_start();

require_once __DIR__ . '/config/database.php';

function e($v){ return htmlspecialchars((string)$v, ENT_QUOTES, 'UTF-8'); }

try {
    if (!isset($_SESSION['user']['codempleado'])) {
        http_response_code(401);
        echo 'No autorizado';
        exit;
    }

    $fecha = isset($_GET['fecha']) ? trim($_GET['fecha']) : '';
    if (empty($fecha)) {
        http_response_code(400);
        echo 'Fecha requerida';
        exit;
    }

    // Validar formato de fecha
    $fechaObj = DateTime::createFromFormat('Y-m-d', $fecha);
    if (!$fechaObj) {
        http_response_code(400);
        echo 'Formato de fecha inválido';
        exit;
    }

    $database = new Database();
    $conn = $database->getConnection();

    // Obtener empresa del usuario
    $stmtEmpresa = $conn->prepare("SELECT codempresa FROM templeado WHERE codempleado = ?");
    $stmtEmpresa->execute([$_SESSION['user']['codempleado']]);
    $empresa = $stmtEmpresa->fetch(PDO::FETCH_ASSOC);
    if (!$empresa || !$empresa['codempresa']) {
        http_response_code(403);
        echo 'No se encontró empresa del usuario';
        exit;
    }
    $codempresaUsuario = $empresa['codempresa'];

    // Obtener pagos donde la fecha seleccionada está entre fecha_iniciocobranza y fechapago
    $stmt = $conn->prepare(
        "SELECT c.codcronogramaventas, c.nropago, c.monto, c.pagadofecha, c.estado,
                c.fecha_iniciocobranza, c.fechapago,
                v.id, v.nombres_ap_raz_soc, v.tipo_documento, v.nro_documento, 
                v.agente, v.paquete_contratado, v.tecnologia, v.cargo_fijo
         FROM tcronogramaventas c
         INNER JOIN timportventas v ON c.id = v.id
         WHERE c.fecha_iniciocobranza IS NOT NULL 
         AND c.fechapago IS NOT NULL
         AND c.fecha_iniciocobranza <= ?
         AND c.fechapago >= ?
         AND v.codempresa = ?
         ORDER BY v.nombres_ap_raz_soc ASC, c.nropago ASC"
    );
    $stmt->execute([$fecha, $fecha, $codempresaUsuario]);
    $pagos = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // Configurar headers para descarga
    $fechaFormateada = $fechaObj->format('Y-m-d');
    $filename = "pagos_ventas_{$fechaFormateada}.xls";
    
    header('Content-Type: application/vnd.ms-excel; charset=UTF-8');
    header('Content-Disposition: attachment; filename="' . $filename . '"');
    header('Cache-Control: max-age=0');

    // BOM para UTF-8
    echo "\xEF\xBB\xBF";

    ?>
    <table border="1">
        <thead>
            <tr style="background-color: #f0f0f0; font-weight: bold;">
                <th>#</th>
                <th>Cliente</th>
                <th>Tipo Documento</th>
                <th>N° Documento</th>
                <th>Agente</th>
                <th>Paquete</th>
                <th>Tecnología</th>
                <th>N° Pago</th>
                <th>Monto</th>
                <th>Estado</th>
                <th>Fecha Inicio Cobranza</th>
                <th>Fecha Fin Cobranza</th>
                <th>Fecha Pago</th>
                <th>Cargo Fijo</th>
            </tr>
        </thead>
        <tbody>
            <?php if (empty($pagos)): ?>
                <tr>
                    <td colspan="14" style="text-align: center; color: #666;">
                        Sin registros para esta fecha
                    </td>
                </tr>
            <?php else: ?>
                <?php foreach ($pagos as $idx => $pago): ?>
                    <tr>
                        <td><?php echo $idx + 1; ?></td>
                        <td><?php echo e($pago['nombres_ap_raz_soc'] ?: '-'); ?></td>
                        <td><?php echo e($pago['tipo_documento'] ?: '-'); ?></td>
                        <td style="mso-number-format: '@';"><?php echo e($pago['nro_documento'] ?: '-'); ?></td>
                        <td><?php echo e($pago['agente'] ?: '-'); ?></td>
                        <td><?php echo e($pago['paquete_contratado'] ?: '-'); ?></td>
                        <td><?php echo e($pago['tecnologia'] ?: '-'); ?></td>
                        <td><?php echo e($pago['nropago'] ?: '-'); ?></td>
                        <td><?php echo $pago['monto'] ? number_format((float)$pago['monto'], 2) : '0.00'; ?></td>
                        <td><?php echo e($pago['estado'] ?: '-'); ?></td>
                        <td><?php echo $pago['fecha_iniciocobranza'] ? date('d/m/Y', strtotime($pago['fecha_iniciocobranza'])) : '-'; ?></td>
                        <td><?php echo $pago['fechapago'] ? date('d/m/Y', strtotime($pago['fechapago'])) : '-'; ?></td>
                        <td><?php echo $pago['pagadofecha'] ? date('d/m/Y', strtotime($pago['pagadofecha'])) : '-'; ?></td>
                        <td><?php echo $pago['cargo_fijo'] ? number_format((float)$pago['cargo_fijo'], 2) : '0.00'; ?></td>
                    </tr>
                <?php endforeach; ?>
                <tr style="background-color: #e8f4fd; font-weight: bold;">
                    <td colspan="8" style="text-align: right;">TOTAL:</td>
                    <td><?php echo number_format(array_sum(array_column($pagos, 'monto')), 2); ?></td>
                    <td colspan="5"></td>
                </tr>
            <?php endif; ?>
        </tbody>
    </table>
    <?php

} catch (Throwable $e) {
    http_response_code(500);
    echo 'Error del servidor: ' . $e->getMessage();
}
