<?php
session_start();
header('Content-Type: application/json; charset=UTF-8');

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

function json_response($data, $code = 200) {
    http_response_code($code);
    echo json_encode($data, JSON_UNESCAPED_UNICODE);
    exit;
}

try {
    if (!isset($_SESSION['user']['codempleado'])) {
        json_response(['success' => false, 'message' => 'No autorizado'], 401);
    }

    $fecha = isset($_GET['fecha']) ? trim($_GET['fecha']) : '';
    if (empty($fecha)) {
        json_response(['success' => false, 'message' => 'Fecha requerida'], 400);
    }

    // Validar formato de fecha
    $fechaObj = DateTime::createFromFormat('Y-m-d', $fecha);
    if (!$fechaObj) {
        json_response(['success' => false, 'message' => 'Formato de fecha inválido'], 400);
    }

    $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']) {
        json_response(['success' => false, 'message' => 'No se encontró empresa del usuario'], 403);
    }
    $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, v.celular
         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);

    ob_start();
    ?>
    <div class="table-responsive">
        <table class="table table-striped table-hover">
            <thead class="table-dark">
                <tr>
                    <th>#</th>
                    <th>Cliente</th>
                    <th>Documento</th>
                    
                    <th>Paquete</th>
                    <th>N° Pago</th>
                    <th class="text-end">Monto</th>
                    <th>Estado</th>
                    <th>Rango Cobranza</th>
                    <th>Nro días</th>
                    <th>Fecha Pago</th>
                    <th>Acciones</th>
                </tr>
            </thead>
            <tbody>
                <?php if (empty($pagos)): ?>
                    <tr>
                        <td colspan="12" class="text-center text-muted py-4">
                            <i class="fas fa-calendar-times fa-2x mb-2"></i><br>
                            Sin registros para esta fecha
                        </td>
                    </tr>
                <?php else: ?>
                    <?php foreach ($pagos as $idx => $pago): ?>
                        <tr>
                            <td><?php echo $idx + 1; ?></td>
                            <td>
                                <strong><?php echo htmlspecialchars($pago['nombres_ap_raz_soc'] ?: '-'); ?></strong>
                            </td>
                            <td>
                                <?php echo htmlspecialchars($pago['tipo_documento'] ?: '-'); ?><br>
                                <strong><?php echo htmlspecialchars($pago['nro_documento'] ?: '-'); ?></strong>
                            </td>
                           
                            <td>
                                <small><?php echo htmlspecialchars($pago['paquete_contratado'] ?: '-'); ?></small>
                                <?php if ($pago['tecnologia']): ?>
                                    <br><span class="badge bg-primary"><?php echo htmlspecialchars($pago['tecnologia']); ?></span>
                                <?php endif; ?>
                            </td>
                            <td>
                                <span class="badge bg-secondary"><?php echo htmlspecialchars($pago['nropago'] ?: '-'); ?></span>
                            </td>
                            <td class="text-end">
                                <strong>S/ <?php echo $pago['monto'] ? number_format((float)$pago['monto'], 2) : '0.00'; ?></strong>
                            </td>
                            <td>
                                <?php 
                                $estado = strtoupper($pago['estado'] ?? '');
                                $estadoClass = '';
                                switch($estado) {
                                    case 'PAGADO':
                                    case 'PAGADA':
                                        $estadoClass = 'bg-success';
                                        break;
                                    case 'PENDIENTE':
                                        $estadoClass = 'bg-warning';
                                        break;
                                    default:
                                        $estadoClass = 'bg-secondary';
                                }
                                ?>
                                <span class="badge <?php echo $estadoClass; ?>">
                                    <?php echo htmlspecialchars($pago['estado'] ?: '-'); ?>
                                </span>
                            </td>
                            <td>
                                <?php 
                                $fechaInicio = $pago['fecha_iniciocobranza'] ? date('d/m/Y', strtotime($pago['fecha_iniciocobranza'])) : '-';
                                $fechaFin = $pago['fechapago'] ? date('d/m/Y', strtotime($pago['fechapago'])) : '-';
                                ?>
                                <small>
                                    <strong>Inicio:</strong> <?php echo $fechaInicio; ?><br>
                                    <strong>Fin:</strong> <?php echo $fechaFin; ?>
                                </small>
                            </td>
                            <td>
                                <?php 
                                if ($pago['fechapago']) {
                                    $tz = new DateTimeZone('America/Lima');
                                    $fechaActual = new DateTime('now', $tz);
                                    $fechaActual->setTime(0, 0, 0); // Normalizar a medianoche
                                    $fechaPago = new DateTime($pago['fechapago'], $tz);
                                    $fechaPago->setTime(0, 0, 0); // Normalizar a medianoche
                                    
                                    // Calcular diferencia en días
                                    $diferencia = $fechaActual->diff($fechaPago);
                                    $dias = $diferencia->days;
                                    
                                    // Si la fecha de pago es anterior a la fecha actual, mostrar negativo
                                    if ($fechaPago < $fechaActual) {
                                        $dias = -$dias;
                                    }
                                    
                                    // Aplicar estilo según si está vencido o no
                                    $badgeClass = $dias < 0 ? 'bg-danger' : ($dias <= 7 ? 'bg-warning' : 'bg-info');
                                    $textoDias = $dias == 0 ? 'Hoy' : ($dias == 1 ? '1 día' : ($dias == -1 ? '-1 día' : $dias . ' días'));
                                    echo '<span class="badge ' . $badgeClass . '" title="Días hasta la fecha de pago">' . $textoDias . '</span>';
                                } else {
                                    echo '-';
                                }
                                ?>
                            </td>
                            <td>
                                <?php echo $pago['pagadofecha'] ? date('d/m/Y', strtotime($pago['pagadofecha'])) : '-'; ?>
                            </td>
                            <td>
                                <?php if ($pago['celular']): ?>
                                    <button class="btn btn-sm btn-success" 
                                            onclick="abrirModalMensajes(<?php echo htmlspecialchars(json_encode([
                                                'id' => $pago['id'],
                                                'celular' => $pago['celular'],
                                                'nombre' => $pago['nombres_ap_raz_soc'],
                                                'documento' => $pago['nro_documento']
                                            ])); ?>)" 
                                            title="Enviar mensaje">
                                        <i class="fas fa-comment-dots"></i> Mensajes
                                    </button>
                                <?php else: ?>
                                    <span class="text-muted small">Sin contacto</span>
                                <?php endif; ?>
                            </td>
                        </tr>
                    <?php endforeach; ?>
                <?php endif; ?>
            </tbody>
            <?php if (!empty($pagos)): ?>
                <tfoot>
                    <tr class="table-info">
                        <th colspan="6" class="text-end">Total:</th>
                        <th class="text-end">
                            <strong>S/ <?php echo number_format(array_sum(array_column($pagos, 'monto')), 2); ?></strong>
                        </th>
                        <th colspan="5"></th>
                    </tr>
                </tfoot>
            <?php endif; ?>
        </table>
    </div>
    <?php
    $html = ob_get_clean();

    // Formatear fecha para mostrar
    $fechaFormateada = $fechaObj->format('d/m/Y');

    json_response([
        'success' => true, 
        'html' => $html, 
        'fecha_fmt' => $fechaFormateada,
        'total_registros' => count($pagos)
    ]);

} catch (Throwable $e) {
    json_response(['success' => false, 'message' => 'Error del servidor: ' . $e->getMessage()], 500);
}
