<?php
include_once 'config/database.php';
include_once 'includes/header.php';

// Determinar mes/año actual
$tz = new DateTimeZone('America/Lima');
$now = new DateTime('now', $tz);
$year = isset($_GET['year']) ? intval($_GET['year']) : intval($now->format('Y'));
$month = isset($_GET['month']) ? intval($_GET['month']) : intval($now->format('n'));
if ($month < 1 || $month > 12) { $month = intval($now->format('n')); }

// Primer y último día del mes
$firstDay = new DateTime(sprintf('%04d-%02d-01', $year, $month), $tz);
$lastDay = (clone $firstDay)->modify('last day of this month');

// Calcular inicio del calendario (lunes) y fin (domingo)
$startCal = (clone $firstDay)->modify('monday this week');
$endCal = (clone $lastDay)->modify('sunday this week');

// Mapa de conteos por día (YYYY-mm-dd => cantidad)
$database = new Database();
$conn = $database->getConnection();

// Obtener la empresa del usuario logueado
$codempresaUsuario = null;
$stmt_empresa = $conn->prepare("SELECT codempresa FROM templeado WHERE codempleado = ?");
$stmt_empresa->execute([$_SESSION['user']['codempleado']]);
$resultado_empresa = $stmt_empresa->fetch(PDO::FETCH_ASSOC);
if ($resultado_empresa) {
    $codempresaUsuario = $resultado_empresa['codempresa'];
}

// Consulta para obtener registros donde el rango fecha_iniciocobranza a fechapago intersecta con el mes visible
$query = "SELECT c.fecha_iniciocobranza, c.fechapago, c.codcronogramaventas
          FROM tcronogramaventas c
          INNER JOIN timportventas e ON c.id = e.id
          WHERE c.fecha_iniciocobranza IS NOT NULL 
          AND c.fechapago IS NOT NULL
          AND c.fecha_iniciocobranza <= ?
          AND c.fechapago >= ?";
$params = [$lastDay->format('Y-m-d'), $startCal->format('Y-m-d')];

if ($codempresaUsuario) {
    $query .= " AND e.codempresa = ?";
    $params[] = $codempresaUsuario;
}

$stmt = $conn->prepare($query);
$stmt->execute($params);
$registros = $stmt->fetchAll(PDO::FETCH_ASSOC);

// Generar conteos por día: cada cliente aparece en cada día entre fecha_iniciocobranza y fechapago
$counts = [];
foreach ($registros as $row) {
    $fechaInicio = new DateTime($row['fecha_iniciocobranza'], $tz);
    $fechaFin = new DateTime($row['fechapago'], $tz);
    
    // Validar que fecha_iniciocobranza <= fechapago
    if ($fechaInicio > $fechaFin) {
        continue; // Saltar registros con fechas inválidas
    }
    
    // Iterar por cada día en el rango
    $fechaActual = clone $fechaInicio;
    while ($fechaActual <= $fechaFin) {
        $dateStr = $fechaActual->format('Y-m-d');
        // Solo contar días que están en el rango del calendario visible
        if ($dateStr >= $startCal->format('Y-m-d') && $dateStr <= $endCal->format('Y-m-d')) {
            if (!isset($counts[$dateStr])) {
                $counts[$dateStr] = 0;
            }
            $counts[$dateStr]++;
        }
        $fechaActual->modify('+1 day');
    }
}

// Nombres de días y meses en español simple
$dias = ['Lun','Mar','Mié','Jue','Vie','Sáb','Dom'];
$meses = [1=>'Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'];
?>

<div class="col-md-10 p-4">
    <div class="d-flex justify-content-between align-items-center mb-3">
        <h2><i class="fas fa-calendar"></i> Pagos por Mes (Fija)</h2>
        <div class="btn-group">
            <?php 
            $prev = (clone $firstDay)->modify('-1 month');
            $next = (clone $firstDay)->modify('+1 month');
            ?>
            <a class="btn btn-outline-secondary" href="?year=<?php echo $prev->format('Y'); ?>&month=<?php echo $prev->format('n'); ?>">
                <i class="fas fa-chevron-left"></i>
            </a>
            <span class="btn btn-light disabled"><?php echo $meses[$month] . ' ' . $year; ?></span>
            <a class="btn btn-outline-secondary" href="?year=<?php echo $next->format('Y'); ?>&month=<?php echo $next->format('n'); ?>">
                <i class="fas fa-chevron-right"></i>
            </a>
        </div>
    </div>

    <div class="card">
        <div class="card-body">
            <div class="table-responsive">
                <table class="table table-bordered align-middle mb-0">
                    <thead class="table-light">
                        <tr>
                            <?php foreach ($dias as $d): ?>
                                <th class="text-center"><?php echo $d; ?></th>
                            <?php endforeach; ?>
                        </tr>
                    </thead>
                    <tbody>
                        <?php
                        $iter = clone $startCal;
                        while ($iter <= $endCal):
                            echo '<tr>';
                            for ($i = 0; $i < 7; $i++):
                                $dateStr = $iter->format('Y-m-d');
                                $isCurrentMonth = ((int)$iter->format('n') === $month);
                                $count = $counts[$dateStr] ?? 0;
                                $cellClass = $isCurrentMonth ? '' : 'bg-light';
                                echo '<td class="' . $cellClass . '">';
                                echo '<div class="d-flex justify-content-between">';
                                echo '<span class="text-muted small">' . $iter->format('d') . '</span>';
                                if ($count > 0) {
                                    echo '<span class="badge bg-primary">' . $count . '</span>';
                                }
                                echo '</div>';
                                echo '<div class="mt-1">';
                                echo '<button class="btn btn-sm ' . ($count>0?'btn-primary':'btn-outline-secondary') . ' w-100" ';
                                echo 'onclick="viewPagosFecha(\'' . $dateStr . '\')" ';
                                echo '" ' . ($isCurrentMonth ? '' : 'disabled') . '>';
                                echo '<i class="fas fa-search"></i> Ver';
                                echo '</button>';
                                echo '</div>';
                                echo '</td>';
                                $iter->modify('+1 day');
                            endfor;
                            echo '</tr>';
                        endwhile;
                        ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</div>

<!-- Modal Detalle por Fecha -->
<div class="modal fade" id="detalleFechaModal" tabindex="-1" aria-labelledby="detalleFechaModalLabel" aria-hidden="true">
    <div class="modal-dialog modal-xl">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="detalleFechaModalLabel"><i class="fas fa-list"></i> Detalle de Pagos</h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
            </div>
            <div class="modal-body">
                <!-- Barra de búsqueda -->
                <div class="row mb-3">
                    <div class="col-md-8">
                        <div class="input-group">
                            <span class="input-group-text"><i class="fas fa-search"></i></span>
                            <input type="text" class="form-control" id="searchInput" placeholder="Buscar por cliente o documento...">
                        </div>
                    </div>
                    <div class="col-md-4">
                        <button type="button" class="btn btn-outline-secondary" onclick="limpiarBusqueda()">
                            <i class="fas fa-times"></i> Limpiar
                        </button>
                    </div>
                </div>
                
                <!-- Contenedor de resultados -->
                <div id="detalleFechaBody">
                </div>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-success" onclick="exportarPagosFecha()" id="exportPagosBtn" style="display: none;">
                    <i class="fas fa-file-excel"></i> Exportar Excel
                </button>
                <button type="button" class="btn btn-secondary" data-bs-dismiss="modal"><i class="fas fa-times"></i> Cerrar</button>
            </div>
        </div>
    </div>
    </div>

<!-- Modal Mensajes -->
<div class="modal fade" id="mensajesModal" tabindex="-1" aria-labelledby="mensajesModalLabel" aria-hidden="true">
    <div class="modal-dialog modal-lg">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="mensajesModalLabel">
                    <i class="fas fa-comment-dots"></i> Seleccionar Mensaje
                </h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
            </div>
            <div class="modal-body">
                <div class="mb-3">
                    <strong>Cliente:</strong> <span id="clienteNombre"></span><br>
                    <strong>Contacto:</strong> <span id="clienteContacto"></span>
                </div>
                <hr>
                <div id="mensajesContainer">
                    <div class="text-center py-4">
                        <i class="fas fa-spinner fa-spin fa-2x"></i><br>
                        Cargando mensajes...
                    </div>
                </div>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">
                    <i class="fas fa-times"></i> Cerrar
                </button>
            </div>
        </div>
    </div>
</div>

<script>
// Variable global para almacenar la fecha actual y datos originales
let currentFecha = null;
let originalData = null;
let currentClienteData = null;

function viewPagosFecha(fecha) {
    currentFecha = fecha;
    const body = document.getElementById('detalleFechaBody');
    body.innerHTML = '<div class="text-center py-4"><i class="fas fa-spinner fa-spin fa-2x"></i><br>Cargando...</div>';
    
    // Limpiar el campo de búsqueda
    document.getElementById('searchInput').value = '';
    
    new bootstrap.Modal(document.getElementById('detalleFechaModal')).show();
    fetch('ajax/get_pagos_fecha_ventas.php?fecha=' + encodeURIComponent(fecha))
        .then(r => r.json())
        .then(data => {
            if (data.success) {
                originalData = data; // Guardar datos originales
                body.innerHTML = data.html;
                document.getElementById('detalleFechaModalLabel').textContent = 'Pagos del ' + data.fecha_fmt;
                // Mostrar botón de exportar si hay datos
                const exportBtn = document.getElementById('exportPagosBtn');
                if (exportBtn && data.html && !data.html.includes('Sin registros')) {
                    exportBtn.style.display = 'inline-block';
                } else {
                    exportBtn.style.display = 'none';
                }
            } else {
                body.innerHTML = '<div class="alert alert-danger">' + (data.message || 'Error al cargar') + '</div>';
                // Ocultar botón de exportar si hay error
                const exportBtn = document.getElementById('exportPagosBtn');
                if (exportBtn) {
                    exportBtn.style.display = 'none';
                }
            }
        })
        .catch(err => {
            console.error(err);
            body.innerHTML = '<div class="alert alert-danger">Error de red</div>';
            // Ocultar botón de exportar si hay error
            const exportBtn = document.getElementById('exportPagosBtn');
            if (exportBtn) {
                exportBtn.style.display = 'none';
            }
        });
}

// Función para filtrar los resultados
function filtrarResultados() {
    const searchTerm = document.getElementById('searchInput').value.toLowerCase().trim();
    const body = document.getElementById('detalleFechaBody');
    
    if (!originalData || !originalData.success) {
        return;
    }
    
    if (searchTerm === '') {
        // Mostrar todos los datos originales
        body.innerHTML = originalData.html;
        return;
    }
    
    // Crear un elemento temporal para parsear el HTML
    const tempDiv = document.createElement('div');
    tempDiv.innerHTML = originalData.html;
    
    // Buscar en las filas de la tabla
    const rows = tempDiv.querySelectorAll('tbody tr');
    let visibleRows = 0;
    
    rows.forEach(row => {
        const cells = row.querySelectorAll('td');
        let shouldShow = false;
        
        // Buscar en las primeras columnas (cliente y documento)
        for (let i = 0; i < Math.min(3, cells.length); i++) {
            const cellText = cells[i].textContent.toLowerCase();
            if (cellText.includes(searchTerm)) {
                shouldShow = true;
                break;
            }
        }
        
        if (shouldShow) {
            row.style.display = '';
            visibleRows++;
        } else {
            row.style.display = 'none';
        }
    });
    
    // Mostrar mensaje si no hay resultados
    if (visibleRows === 0) {
        body.innerHTML = `
            <div class="alert alert-info text-center">
                <i class="fas fa-search"></i>
                <p class="mb-0">No se encontraron resultados para "${searchTerm}"</p>
            </div>
        `;
    } else {
        body.innerHTML = tempDiv.innerHTML;
    }
}

// Función para limpiar la búsqueda
function limpiarBusqueda() {
    document.getElementById('searchInput').value = '';
    filtrarResultados();
}

// Función para exportar pagos de la fecha a Excel
function exportarPagosFecha() {
    if (!currentFecha) {
        alert('No hay fecha seleccionada para exportar');
        return;
    }
    
    window.location.href = `export_pagos_fecha_ventas.php?fecha=${encodeURIComponent(currentFecha)}`;
}

// Función para abrir modal de mensajes
function abrirModalMensajes(clienteData) {
    currentClienteData = clienteData;
    
    // Mostrar información del cliente
    document.getElementById('clienteNombre').textContent = clienteData.nombre || '-';
    document.getElementById('clienteContacto').textContent = clienteData.celular || '-';
    
    // Limpiar contenedor y mostrar loading
    const container = document.getElementById('mensajesContainer');
    container.innerHTML = '<div class="text-center py-4"><i class="fas fa-spinner fa-spin fa-2x"></i><br>Cargando mensajes...</div>';
    
    // Mostrar modal
    const modal = new bootstrap.Modal(document.getElementById('mensajesModal'));
    modal.show();
    
    // Cargar mensajes
    fetch('ajax/get_mensajes_empresa.php')
        .then(r => r.json())
        .then(data => {
            if (data.success && data.mensajes && data.mensajes.length > 0) {
                let html = '<div class="list-group">';
                data.mensajes.forEach((mensaje, index) => {
                    html += `
                        <div class="list-group-item">
                            <div class="d-flex justify-content-between align-items-start">
                                <div class="flex-grow-1">
                                    <p class="mb-1">${escapeHtml(mensaje.mensaje)}</p>
                                </div>
                                <button class="btn btn-success btn-sm ms-2" 
                                        onclick="enviarWhatsApp(${index}, ${mensaje.codmensaje})"
                                        title="Enviar por WhatsApp">
                                    <i class="fab fa-whatsapp"></i> Enviar
                                </button>
                            </div>
                        </div>
                    `;
                });
                html += '</div>';
                container.innerHTML = html;
                
                // Guardar mensajes en variable global para acceso rápido
                window.mensajesList = data.mensajes;
            } else {
                container.innerHTML = `
                    <div class="alert alert-info text-center">
                        <i class="fas fa-info-circle"></i>
                        <p class="mb-0">No hay mensajes disponibles para su empresa.</p>
                        <p class="mb-0 mt-2"><small>Puede crear mensajes desde el módulo de gestión de mensajes.</small></p>
                    </div>
                `;
            }
        })
        .catch(err => {
            console.error(err);
            container.innerHTML = '<div class="alert alert-danger">Error al cargar los mensajes</div>';
        });
}

// Función para enviar WhatsApp
function enviarWhatsApp(index, codmensaje) {
    if (!currentClienteData || !currentClienteData.celular) {
        alert('No hay número de contacto disponible');
        return;
    }
    
    if (!window.mensajesList || !window.mensajesList[index]) {
        alert('Mensaje no encontrado');
        return;
    }
    
    const mensaje = window.mensajesList[index].mensaje;
    const telefono = currentClienteData.celular.replace(/[^0-9]/g, ''); // Limpiar número
    
    // Asegurar formato internacional (Perú +51)
    let telefonoFormato = telefono;
    if (telefono.length === 9 && !telefono.startsWith('51')) {
        telefonoFormato = '51' + telefono;
    } else if (telefono.startsWith('0')) {
        telefonoFormato = '51' + telefono.substring(1);
    }
    
    // Crear URL de WhatsApp Web
    const whatsappUrl = `https://wa.me/${telefonoFormato}?text=${encodeURIComponent(mensaje)}`;
    
    // Abrir WhatsApp Web en nueva pestaña
    window.open(whatsappUrl, '_blank');
    
    // Cerrar modal después de un breve delay
    setTimeout(() => {
        const modal = bootstrap.Modal.getInstance(document.getElementById('mensajesModal'));
        if (modal) {
            modal.hide();
        }
    }, 500);
}

// Función auxiliar para escapar HTML
function escapeHtml(text) {
    const div = document.createElement('div');
    div.textContent = text;
    return div.innerHTML;
}

// Event listener para búsqueda en tiempo real
document.addEventListener('DOMContentLoaded', function() {
    const searchInput = document.getElementById('searchInput');
    if (searchInput) {
        searchInput.addEventListener('input', function() {
            // Debounce para evitar búsquedas excesivas
            clearTimeout(this.searchTimeout);
            this.searchTimeout = setTimeout(() => {
                filtrarResultados();
            }, 300);
        });
    }
});
</script>

<?php include_once 'includes/footer.php'; ?>
