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

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

// Obtener la empresa del usuario logueado
$codempresaUsuario = null;
try {
    $stmt = $conn->prepare("SELECT codempresa FROM templeado WHERE codempleado = ?");
    $stmt->execute([$_SESSION['user']['codempleado']]);
    $resultado = $stmt->fetch(PDO::FETCH_ASSOC);
    if ($resultado) {
        $codempresaUsuario = $resultado['codempresa'];
    }
} catch(PDOException $e) {
    $_SESSION['error'] = "Error al obtener la empresa del usuario: " . $e->getMessage();
}

// Obtener empresas para el filtro
$empresas = [];
try {
    $stmt = $conn->prepare("SELECT * FROM tempresa ORDER BY nomempresa");
    $stmt->execute();
    $empresas = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch(PDOException $e) {
    $empresas = [];
}

// Procesar filtros
$fechaInicio = isset($_GET['fecha_inicio']) ? $_GET['fecha_inicio'] : date('Y-m-01'); // Primer día del mes actual
$fechaFin = isset($_GET['fecha_fin']) ? $_GET['fecha_fin'] : date('Y-m-t'); // Último día del mes actual
$empresaSeleccionada = isset($_GET['empresa']) ? $_GET['empresa'] : $codempresaUsuario;
$mostrarMoviles = isset($_GET['moviles']) ? true : false;
$mostrarFijas = isset($_GET['fijas']) ? true : false;

// Si no se selecciona ningún tipo, mostrar ambos por defecto
if (!$mostrarMoviles && !$mostrarFijas) {
    $mostrarMoviles = true;
    $mostrarFijas = true;
}

// Datos para gráficos
$datosGrafico = [];

if ($empresaSeleccionada && ($mostrarMoviles || $mostrarFijas)) {
    try {
        // Generar array de meses en el rango
        $meses = [];
        $fechaActual = new DateTime($fechaInicio);
        $fechaFinal = new DateTime($fechaFin);
        
        while ($fechaActual <= $fechaFinal) {
            $meses[] = $fechaActual->format('Y-m');
            $fechaActual->add(new DateInterval('P1M'));
        }
        
        $datosGrafico['meses'] = $meses;
        $datosGrafico['moviles'] = [];
        $datosGrafico['fijas'] = [];
        
        // Consulta para móviles (tcronogramaequipo)
        if ($mostrarMoviles) {
            foreach ($meses as $mes) {
                $stmt = $conn->prepare("
                    SELECT COALESCE(SUM(c.monto), 0) as total_monto
                    FROM tcronogramaequipo c
                    INNER JOIN timportequipos i ON c.ID = i.id
                    WHERE i.codempresa = ? 
                    AND DATE_FORMAT(c.fechapago, '%Y-%m') = ?
                    AND c.monto IS NOT NULL
                ");
                $stmt->execute([$empresaSeleccionada, $mes]);
                $resultado = $stmt->fetch(PDO::FETCH_ASSOC);
                $datosGrafico['moviles'][] = floatval($resultado['total_monto']);
            }
        }
        
        // Consulta para fijas (tcronogramaventas)
        if ($mostrarFijas) {
            foreach ($meses as $mes) {
                $stmt = $conn->prepare("
                    SELECT COALESCE(SUM(c.monto), 0) as total_monto
                    FROM tcronogramaventas c
                    INNER JOIN timportventas i ON c.id = i.id
                    WHERE i.codempresa = ? 
                    AND DATE_FORMAT(c.fechapago, '%Y-%m') = ?
                    AND c.monto IS NOT NULL
                ");
                $stmt->execute([$empresaSeleccionada, $mes]);
                $resultado = $stmt->fetch(PDO::FETCH_ASSOC);
                $datosGrafico['fijas'][] = floatval($resultado['total_monto']);
            }
        }
        
    } catch(PDOException $e) {
        $_SESSION['error'] = "Error al obtener datos para el gráfico: " . $e->getMessage();
    }
}

// Obtener nombre de la empresa seleccionada
$nombreEmpresa = "Empresa no encontrada";
if ($empresaSeleccionada) {
    try {
        $stmt = $conn->prepare("SELECT nomempresa FROM tempresa WHERE codempresa = ?");
        $stmt->execute([$empresaSeleccionada]);
        $empresa = $stmt->fetch(PDO::FETCH_ASSOC);
        if ($empresa) {
            $nombreEmpresa = $empresa['nomempresa'];
        }
    } catch(PDOException $e) {
        // Mantener el valor por defecto
    }
}
?>

<style>
.filtros-card {
    background: white;
    border-radius: 20px;
    box-shadow: 0 10px 30px rgba(0,0,0,0.1);
    border: none;
    margin-bottom: 30px;
}

.grafico-card {
    background: white;
    border-radius: 20px;
    box-shadow: 0 10px 30px rgba(0,0,0,0.1);
    border: none;
    margin-bottom: 30px;
}

.titulo-principal {
    background: linear-gradient(135deg, #667eea, #764ba2);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
    font-weight: bold;
    font-size: 2.5rem;
    margin-bottom: 30px;
}

.filtro-group {
    background: linear-gradient(135deg, #f8f9fa, #ffffff);
    border-radius: 15px;
    padding: 20px;
    margin-bottom: 20px;
    border: 2px solid #e9ecef;
    transition: all 0.3s ease;
}

.filtro-group:hover {
    border-color: #667eea;
    box-shadow: 0 5px 15px rgba(102, 126, 234, 0.1);
}

.filtro-label {
    font-weight: 600;
    color: #495057;
    margin-bottom: 10px;
    display: flex;
    align-items: center;
}

.filtro-label i {
    margin-right: 10px;
    color: #667eea;
}

.form-control-modern {
    border: 2px solid #e9ecef;
    border-radius: 10px;
    padding: 12px 15px;
    transition: all 0.3s ease;
    font-size: 1rem;
}

.form-control-modern:focus {
    border-color: #667eea;
    box-shadow: 0 0 0 0.2rem rgba(102, 126, 234, 0.25);
}

.btn-modern {
    background: linear-gradient(135deg, #667eea, #764ba2);
    border: none;
    border-radius: 10px;
    padding: 12px 25px;
    font-weight: 600;
    transition: all 0.3s ease;
    box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3);
}

.btn-modern:hover {
    transform: translateY(-2px);
    box-shadow: 0 8px 25px rgba(102, 126, 234, 0.4);
}

.checkbox-modern {
    display: flex;
    align-items: center;
    margin: 10px 0;
    padding: 10px;
    background: #f8f9fa;
    border-radius: 10px;
    transition: all 0.3s ease;
}

.checkbox-modern:hover {
    background: #e9ecef;
}

.checkbox-modern input[type="checkbox"] {
    margin-right: 10px;
    transform: scale(1.2);
}

.checkbox-modern label {
    margin: 0;
    font-weight: 500;
    cursor: pointer;
}

.grafico-container {
    position: relative;
    height: 500px;
    padding: 20px;
}

.resumen-cards {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
    gap: 20px;
    margin-bottom: 30px;
}

.resumen-card {
    background: linear-gradient(135deg, #667eea, #764ba2);
    color: white;
    border-radius: 15px;
    padding: 25px;
    text-align: center;
    box-shadow: 0 8px 25px rgba(102, 126, 234, 0.3);
    transition: all 0.3s ease;
}

.resumen-card:hover {
    transform: translateY(-5px);
    box-shadow: 0 15px 35px rgba(102, 126, 234, 0.4);
}

.resumen-card h3 {
    font-size: 2rem;
    margin-bottom: 10px;
    font-weight: bold;
}

.resumen-card p {
    margin: 0;
    opacity: 0.9;
    font-size: 1.1rem;
}

.sin-datos {
    text-align: center;
    padding: 60px 20px;
    background: linear-gradient(135deg, #f8f9fa, #e9ecef);
    border-radius: 20px;
    margin: 40px 0;
}

.sin-datos i {
    font-size: 4rem;
    color: #6c757d;
    margin-bottom: 20px;
}

.sin-datos h4 {
    color: #495057;
    margin-bottom: 15px;
}

.sin-datos p {
    color: #6c757d;
    font-size: 1.1rem;
}

@media (max-width: 768px) {
    .titulo-principal {
        font-size: 2rem;
    }
    
    .grafico-container {
        height: 400px;
    }
    
    .resumen-cards {
        grid-template-columns: 1fr;
    }
}
</style>

<div class="col-md-10 p-4">
    <div class="d-flex justify-content-between align-items-center mb-4">
        <h2 style="background: linear-gradient(135deg, #667eea, #764ba2); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; font-weight: bold;">
            <i class="fas fa-chart-bar" style="color: #667eea;"></i> Reportes por Empresa
        </h2>
    </div>

        <?php if (isset($_SESSION['success'])): ?>
            <div class="alert alert-success alert-dismissible fade show">
                <i class="fas fa-check-circle"></i>
                <?php 
                echo $_SESSION['success']; 
                unset($_SESSION['success']);
                ?>
                <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
            </div>
        <?php endif; ?>

        <?php if (isset($_SESSION['error'])): ?>
            <div class="alert alert-danger alert-dismissible fade show">
                <i class="fas fa-exclamation-triangle"></i>
                <?php 
                echo $_SESSION['error']; 
                unset($_SESSION['error']);
                ?>
                <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
            </div>
        <?php endif; ?>

        <!-- Filtros -->
        <div class="card filtros-card">
            <div class="card-body">
                <h5 class="card-title mb-4">
                    <i class="fas fa-filter" style="color: #667eea;"></i> Filtros de Búsqueda
                </h5>
                
                <form method="GET" action="reporte_por_empresa.php" class="row g-4">
                    <!-- Filtros de fecha -->
                    <div class="col-md-6">
                        <div class="filtro-group">
                            <label class="filtro-label">
                                <i class="fas fa-calendar-alt"></i> Rango de Fechas
                            </label>
                            <div class="row">
                                <div class="col-md-6">
                                    <label class="form-label">Fecha Inicio</label>
                                    <input type="date" class="form-control form-control-modern" name="fecha_inicio" 
                                           value="<?php echo htmlspecialchars($fechaInicio); ?>" required>
                                </div>
                                <div class="col-md-6">
                                    <label class="form-label">Fecha Fin</label>
                                    <input type="date" class="form-control form-control-modern" name="fecha_fin" 
                                           value="<?php echo htmlspecialchars($fechaFin); ?>" required>
                                </div>
                            </div>
                        </div>
                    </div>

                    <!-- Filtro de empresa -->
                    <div class="col-md-6">
                        <div class="filtro-group">
                            <label class="filtro-label">
                                <i class="fas fa-building"></i> Empresa
                            </label>
                            <select class="form-control form-control-modern" name="empresa" required>
                                <option value="">Seleccione una empresa</option>
                                <?php foreach ($empresas as $empresa): ?>
                                    <option value="<?php echo $empresa['codempresa']; ?>" 
                                            <?php echo ($empresaSeleccionada == $empresa['codempresa']) ? 'selected' : ''; ?>>
                                        <?php echo htmlspecialchars($empresa['nomempresa']); ?>
                                    </option>
                                <?php endforeach; ?>
                            </select>
                        </div>
                    </div>

                    <!-- Checkboxes para tipos de servicio -->
                    <div class="col-md-12">
                        <div class="filtro-group">
                            <label class="filtro-label">
                                <i class="fas fa-mobile-alt"></i> Tipos de Servicio
                            </label>
                            <div class="row">
                                <div class="col-md-6">
                                    <div class="checkbox-modern">
                                        <input type="checkbox" id="moviles" name="moviles" 
                                               <?php echo $mostrarMoviles ? 'checked' : ''; ?>>
                                        <label for="moviles">
                                            <i class="fas fa-mobile-alt" style="color: #28a745; margin-right: 8px;"></i>
                                            Móviles
                                        </label>
                                    </div>
                                </div>
                                <div class="col-md-6">
                                    <div class="checkbox-modern">
                                        <input type="checkbox" id="fijas" name="fijas" 
                                               <?php echo $mostrarFijas ? 'checked' : ''; ?>>
                                        <label for="fijas">
                                            <i class="fas fa-phone-volume" style="color: #007bff; margin-right: 8px;"></i>
                                            Fijas
                                        </label>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>

                    <!-- Botón de búsqueda -->
                    <div class="col-md-12 text-center">
                        <button type="submit" class="btn btn-modern text-white">
                            <i class="fas fa-search"></i> Generar Reporte
                        </button>
                    </div>
                </form>
            </div>
        </div>

        <?php if (!empty($datosGrafico) && ($mostrarMoviles || $mostrarFijas)): ?>
            <!-- Resumen de datos -->
            <div class="resumen-cards">
                <?php if ($mostrarMoviles): ?>
                    <?php
                    $totalMoviles = array_sum($datosGrafico['moviles']);
                    ?>
                    <div class="resumen-card">
                        <h3><?php echo number_format($totalMoviles, 2); ?></h3>
                        <p><i class="fas fa-mobile-alt"></i> Total Móviles</p>
                    </div>
                <?php endif; ?>

                <?php if ($mostrarFijas): ?>
                    <?php
                    $totalFijas = array_sum($datosGrafico['fijas']);
                    ?>
                    <div class="resumen-card">
                        <h3><?php echo number_format($totalFijas, 2); ?></h3>
                        <p><i class="fas fa-phone-volume"></i> Total Fijas</p>
                    </div>
                <?php endif; ?>

                <div class="resumen-card">
                    <h3><?php echo number_format(($totalMoviles ?? 0) + ($totalFijas ?? 0), 2); ?></h3>
                    <p><i class="fas fa-chart-line"></i> Total General</p>
                </div>
            </div>

            <!-- Gráfico -->
            <div class="card grafico-card">
                <div class="card-body">
                    <h5 class="card-title mb-4">
                        <i class="fas fa-chart-bar" style="color: #667eea;"></i> 
                        Ventas por Mes - <?php echo htmlspecialchars($nombreEmpresa); ?>
                    </h5>
                    <div class="grafico-container">
                        <canvas id="graficoVentas"></canvas>
                    </div>
                </div>
            </div>
        <?php else: ?>
            <!-- Sin datos -->
            <div class="sin-datos">
                <i class="fas fa-chart-bar"></i>
                <h4>No hay datos disponibles</h4>
                <p>Seleccione los filtros y genere un reporte para ver los gráficos.</p>
                <p class="text-muted">
                    <i class="fas fa-info-circle"></i> 
                    Asegúrese de seleccionar una empresa y al menos un tipo de servicio.
                </p>
            </div>
        <?php endif; ?>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    <?php if (!empty($datosGrafico) && ($mostrarMoviles || $mostrarFijas)): ?>
        // Configuración del gráfico
        const ctx = document.getElementById('graficoVentas').getContext('2d');
        
        // Preparar datos
        const meses = <?php echo json_encode($datosGrafico['meses']); ?>;
        const datosMoviles = <?php echo json_encode($datosGrafico['moviles']); ?>;
        const datosFijas = <?php echo json_encode($datosGrafico['fijas']); ?>;
        
        // Formatear meses para mostrar
        const mesesFormateados = meses.map(mes => {
            const fecha = new Date(mes + '-01');
            return fecha.toLocaleDateString('es-ES', { month: 'short', year: 'numeric' });
        });
        
        // Configurar datasets
        const datasets = [];
        
        <?php if ($mostrarMoviles): ?>
        datasets.push({
            label: 'Móviles',
            data: datosMoviles,
            backgroundColor: 'rgba(40, 167, 69, 0.8)',
            borderColor: 'rgba(40, 167, 69, 1)',
            borderWidth: 2,
            borderRadius: 8,
            borderSkipped: false,
        });
        <?php endif; ?>
        
        <?php if ($mostrarFijas): ?>
        datasets.push({
            label: 'Fijas',
            data: datosFijas,
            backgroundColor: 'rgba(0, 123, 255, 0.8)',
            borderColor: 'rgba(0, 123, 255, 1)',
            borderWidth: 2,
            borderRadius: 8,
            borderSkipped: false,
        });
        <?php endif; ?>
        
        // Crear gráfico
        new Chart(ctx, {
            type: 'bar',
            data: {
                labels: mesesFormateados,
                datasets: datasets
            },
            options: {
                responsive: true,
                maintainAspectRatio: false,
                plugins: {
                    title: {
                        display: true,
                        text: 'Ventas por Mes',
                        font: {
                            size: 18,
                            weight: 'bold'
                        },
                        color: '#495057'
                    },
                    legend: {
                        display: true,
                        position: 'top',
                        labels: {
                            usePointStyle: true,
                            padding: 20,
                            font: {
                                size: 14,
                                weight: 'bold'
                            }
                        }
                    },
                    tooltip: {
                        backgroundColor: 'rgba(0, 0, 0, 0.8)',
                        titleColor: 'white',
                        bodyColor: 'white',
                        borderColor: '#667eea',
                        borderWidth: 2,
                        cornerRadius: 8,
                        displayColors: true,
                        callbacks: {
                            label: function(context) {
                                return context.dataset.label + ': S/ ' + context.parsed.y.toLocaleString('es-PE', {
                                    minimumFractionDigits: 2,
                                    maximumFractionDigits: 2
                                });
                            }
                        }
                    }
                },
                scales: {
                    x: {
                        grid: {
                            color: 'rgba(0, 0, 0, 0.1)',
                            drawBorder: false
                        },
                        ticks: {
                            color: '#495057',
                            font: {
                                size: 12,
                                weight: 'bold'
                            }
                        }
                    },
                    y: {
                        beginAtZero: true,
                        grid: {
                            color: 'rgba(0, 0, 0, 0.1)',
                            drawBorder: false
                        },
                        ticks: {
                            color: '#495057',
                            font: {
                                size: 12,
                                weight: 'bold'
                            },
                            callback: function(value) {
                                return 'S/ ' + value.toLocaleString('es-PE');
                            }
                        }
                    }
                },
                animation: {
                    duration: 2000,
                    easing: 'easeInOutQuart'
                },
                interaction: {
                    intersect: false,
                    mode: 'index'
                }
            }
        });
    <?php endif; ?>
    
    // Validación de fechas
    const fechaInicio = document.querySelector('input[name="fecha_inicio"]');
    const fechaFin = document.querySelector('input[name="fecha_fin"]');
    
    function validarFechas() {
        if (fechaInicio.value && fechaFin.value) {
            if (new Date(fechaInicio.value) > new Date(fechaFin.value)) {
                fechaFin.setCustomValidity('La fecha fin debe ser posterior a la fecha inicio');
            } else {
                fechaFin.setCustomValidity('');
            }
        }
    }
    
    fechaInicio.addEventListener('change', validarFechas);
    fechaFin.addEventListener('change', validarFechas);
    
    // Validación de checkboxes
    const form = document.querySelector('form');
    form.addEventListener('submit', function(e) {
        const moviles = document.getElementById('moviles').checked;
        const fijas = document.getElementById('fijas').checked;
        
        if (!moviles && !fijas) {
            e.preventDefault();
            alert('Debe seleccionar al menos un tipo de servicio (Móviles o Fijas)');
            return false;
        }
    });
});
</script>

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