<?php
include 'sesion_user.php';
include 'concha.php';
mysql_connect("$host", "$usuario", "$contra");
mysql_select_db("$basedatos");

// Filtro seleccionado
$filtro = isset($_GET['filtro']) ? $_GET['filtro'] : 'mes';

// Campos opcionales para "personalizado"
$desde = isset($_GET['desde']) ? $_GET['desde'] : '';
$hasta = isset($_GET['hasta']) ? $_GET['hasta'] : '';

// Variables iniciales
$fecha_inicio = '';
$fecha_fin = '';
$labels = [];
$data_ventas = [];
$data_totales = [];
$data_promedio = [];
$lista_resultados = [];

// Función de inicialización de arrays en base a una lista de labels
function initDataArrays($labels) {
    $data_ventas = array_fill(0, count($labels), 0);
    $data_totales = array_fill(0, count($labels), 0);
    $data_promedio = array_fill(0, count($labels), 0);
    return [$data_ventas, $data_totales, $data_promedio];
}

// Función para convertir el número de mes a nombre (en español) y año
function nombreMes($year, $month) {
    $meses = [
        1 => 'Enero', 2 => 'Febrero', 3 => 'Marzo', 4 => 'Abril',
        5 => 'Mayo', 6 => 'Junio', 7 => 'Julio', 8 => 'Agosto',
        9 => 'Septiembre', 10 => 'Octubre', 11 => 'Noviembre', 12 => 'Diciembre'
    ];
    return $meses[$month] . " " . $year;
}

// Lógica de filtros
if ($filtro == 'dia') {
    // Hoy - desglose por hora
    $fecha_inicio = date('Y-m-d 00:00:00');
    $fecha_fin = date('Y-m-d 23:59:59');

    for ($i = 0; $i < 24; $i++) {
        $labels[] = sprintf('%02d:00', $i);
    }
    list($data_ventas, $data_totales, $data_promedio) = initDataArrays($labels);
    $intervalo = 'HOUR(fecha)';

} elseif ($filtro == 'semana') {
    // Semana actual - desglose diario
    $fecha_inicio = date('Y-m-d 00:00:00', strtotime('monday this week'));
    $fecha_fin = date('Y-m-d 23:59:59', strtotime('sunday this week'));
    $labels = ['Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado', 'Domingo'];
    list($data_ventas, $data_totales, $data_promedio) = initDataArrays($labels);
    $intervalo = 'WEEKDAY(fecha)';

} elseif ($filtro == 'mes') {
    // Mes actual - desglose diario
    $fecha_inicio = date('Y-m-01 00:00:00');
    $fecha_fin = date('Y-m-t 23:59:59');
    $dias_mes = date('t');
    for ($i = 1; $i <= $dias_mes; $i++) {
        $labels[] = (string)$i;
    }
    list($data_ventas, $data_totales, $data_promedio) = initDataArrays($labels);
    $intervalo = 'DAY(fecha)';

} elseif ($filtro == 'ano') {
    // Año actual - desglose mensual
    $fecha_inicio = date('Y-01-01 00:00:00');
    $fecha_fin = date('Y-12-31 23:59:59');
    $labels = ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio',
               'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'];
    list($data_ventas, $data_totales, $data_promedio) = initDataArrays($labels);
    $intervalo = 'MONTH(fecha)';

} elseif ($filtro == 'mesAnterior') {
    // Mes anterior - desglose diario
    $fecha_inicio = date('Y-m-01 00:00:00', strtotime("-1 month"));
    $fecha_fin = date('Y-m-t 23:59:59', strtotime("-1 month"));
    $dias_mes_anterior = date('t', strtotime("-1 month"));
    for ($i = 1; $i <= $dias_mes_anterior; $i++) {
        $labels[] = (string)$i;
    }
    list($data_ventas, $data_totales, $data_promedio) = initDataArrays($labels);
    $intervalo = 'DAY(fecha)';

} elseif ($filtro == 'ultimos3meses') {
    // Últimos 3 meses (incluyendo el mes actual) - desglose mensual
    $fecha_inicio = date('Y-m-01 00:00:00', strtotime("-2 months"));
    $fecha_fin = date('Y-m-t 23:59:59'); // Fin del mes actual

    // Generamos 3 etiquetas: la más antigua primero
    $labels = [];
    $current = new DateTime($fecha_inicio);
    $end     = new DateTime($fecha_fin);

    $mesIndex = 0;
    while ($current <= $end && $mesIndex < 3) {
        $year  = $current->format('Y');
        $month = $current->format('n');
        $labels[] = nombreMes($year, $month);
        $current->modify('+1 month');
        $mesIndex++;
    }

    list($data_ventas, $data_totales, $data_promedio) = initDataArrays($labels);
    $intervalo = 'MES_GRUPAL';

} elseif ($filtro == 'ultimos6meses') {
    // Últimos 6 meses - desglose mensual
    $fecha_inicio = date('Y-m-01 00:00:00', strtotime("-5 months"));
    $fecha_fin = date('Y-m-t 23:59:59'); // Fin del mes actual

    $labels = [];
    $current = new DateTime($fecha_inicio);
    $end     = new DateTime($fecha_fin);

    $mesIndex = 0;
    while ($current <= $end && $mesIndex < 6) {
        $year  = $current->format('Y');
        $month = $current->format('n');
        $labels[] = nombreMes($year, $month);
        $current->modify('+1 month');
        $mesIndex++;
    }

    list($data_ventas, $data_totales, $data_promedio) = initDataArrays($labels);
    $intervalo = 'MES_GRUPAL';

} elseif ($filtro == 'personalizado' && !empty($desde) && !empty($hasta)) {
    // Rango personalizado - desglose diario
    $fecha_inicio = $desde . ' 00:00:00';
    $fecha_fin = $hasta . ' 23:59:59';

    $labels = [];
    $period = new DatePeriod(
        new DateTime($desde),
        new DateInterval('P1D'),
        (new DateTime($hasta))->modify('+1 day')
    );
    foreach ($period as $idx => $date) {
        $labels[] = $date->format('Y-m-d');
    }
    list($data_ventas, $data_totales, $data_promedio) = initDataArrays($labels);
    $intervalo = 'DAY(fecha)';
}

// ---------------------------------------------------------------------------------------
// Consulta de datos
// NOTA: Aquí añadimos la CONDICIÓN para excluir montos <= 0 (negativos y cero):
//       AND CAST(monto AS DECIMAL(10,2)) > 0
// ---------------------------------------------------------------------------------------

if ($intervalo == 'MES_GRUPAL') {
    // Para ultimos3meses o ultimos6meses
    $sql = "SELECT 
                YEAR(fecha) AS y, 
                MONTH(fecha) AS m, 
                COUNT(*) AS cantidad, 
                SUM(CAST(monto AS DECIMAL(10,2))) AS total
            FROM caja
            WHERE fecha >= '$fecha_inicio' 
              AND fecha <= '$fecha_fin'
              AND CAST(monto AS DECIMAL(10,2)) > 0  -- <--- EXCLUIMOS NEGATIVOS / CERO
            GROUP BY YEAR(fecha), MONTH(fecha)
            ORDER BY YEAR(fecha), MONTH(fecha)";
} else {
    $sql = "SELECT 
                $intervalo AS periodo, 
                COUNT(*) AS cantidad, 
                SUM(CAST(monto AS DECIMAL(10,2))) AS total
            FROM caja
            WHERE fecha >= '$fecha_inicio' 
              AND fecha <= '$fecha_fin'
              AND CAST(monto AS DECIMAL(10,2)) > 0  -- <--- EXCLUIMOS NEGATIVOS / CERO
            GROUP BY periodo
            ORDER BY periodo";
}

$consulta = mysql_query($sql);
if (!$consulta) {
    die("Error en la consulta: " . mysql_error());
}

// Rellenar los datos en los arrays
if ($intervalo == 'MES_GRUPAL') {
    while ($row = mysql_fetch_assoc($consulta)) {
        $year  = $row['y'];
        $month = $row['m'];

        // Construimos el texto del label, por ej. "Febrero 2025"
        $mesLabel = nombreMes($year, $month);

        // Buscar ese mes en el array de labels
        $pos = array_search($mesLabel, $labels);
        if ($pos !== false) {
            $cantidad = $row['cantidad'];
            $total = $row['total'];
            $data_ventas[$pos]   = $cantidad;
            $data_totales[$pos]  = $total;
            $data_promedio[$pos] = ($cantidad > 0) ? round($total / $cantidad, 2) : 0;

            $lista_resultados[] = [
                'periodo'  => $labels[$pos],
                'ventas'   => $cantidad,
                'total'    => $total,
                'promedio' => $data_promedio[$pos]
            ];
        }
    }

} else {
    // Casos con $intervalo = HOUR(fecha), WEEKDAY(fecha), DAY(fecha), MONTH(fecha)
    while ($row = mysql_fetch_assoc($consulta)) {
        $periodo  = (int)$row['periodo'];
        $cantidad = $row['cantidad'];
        $total    = $row['total'];

        if ($filtro == 'mes' || $filtro == 'mesAnterior') {
            // Desglose diario => índice = periodo - 1
            $pos = $periodo - 1;
        } elseif ($filtro == 'ano') {
            // Desglose mensual => índice = periodo - 1
            $pos = $periodo - 1;
        } elseif ($filtro == 'personalizado' || $filtro == 'dia' || $filtro == 'semana') {
            // 'dia' => HOUR(fecha) => 0..23
            // 'semana' => WEEKDAY(fecha) => 0..6
            // 'personalizado' => DAY(fecha) => 1..31 (depende de tu lógica)
            // Simplificamos:
            if ($filtro == 'personalizado') {
                $pos = $periodo - 1;
            } else {
                $pos = $periodo;
            }
        } else {
            $pos = $periodo - 1;
        }

        if (isset($data_ventas[$pos])) {
            $data_ventas[$pos]   = $cantidad;
            $data_totales[$pos]  = $total;
            $data_promedio[$pos] = ($cantidad > 0) ? round($total / $cantidad, 2) : 0;

            $lista_resultados[] = [
                'periodo'  => $labels[$pos],
                'ventas'   => $cantidad,
                'total'    => $total,
                'promedio' => $data_promedio[$pos]
            ];
        }
    }
}
mysql_free_result($consulta);

// Calcular sumas globales
$total_ventas = array_sum($data_ventas);
$total_montos = array_sum($data_totales);
$total_promedio = $total_ventas > 0 ? round($total_montos / $total_ventas, 2) : 0;
?>

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Estadísticas</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css">
    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
<div class="container">

    <!-- BOTÓN VOLVER -->
    <div class="mt-3 mb-3">
        <a href="estadisticas.php" class="btn btn-primary">Volver</a>
    </div>

    <h2>Estadísticas de Ventas</h2>

    <form method="get" class="form-inline mb-3">
        <label for="filtro" class="mr-2">Seleccionar período:</label>
        <select name="filtro" id="filtro" class="form-control mr-2" onchange="this.form.submit()">
            <option value="dia"         <?= $filtro == 'dia'         ? 'selected' : '' ?>>Día (hoy)</option>
            <option value="semana"      <?= $filtro == 'semana'      ? 'selected' : '' ?>>Semana actual</option>
            <option value="mes"         <?= $filtro == 'mes'         ? 'selected' : '' ?>>Mes actual</option>
            <option value="mesAnterior" <?= $filtro == 'mesAnterior' ? 'selected' : '' ?>>Mes anterior</option>
            <option value="ultimos3meses" <?= $filtro == 'ultimos3meses' ? 'selected' : '' ?>>Últimos 3 meses</option>
            <option value="ultimos6meses" <?= $filtro == 'ultimos6meses' ? 'selected' : '' ?>>Últimos 6 meses</option>
            <option value="ano"         <?= $filtro == 'ano'         ? 'selected' : '' ?>>Año actual</option>
            <option value="personalizado" <?= $filtro == 'personalizado' ? 'selected' : '' ?>>Personalizado</option>
        </select>

        <?php if ($filtro == 'personalizado'): ?>
            <label for="desde" class="mr-2 ml-2">Desde:</label>
            <input type="date" id="desde" name="desde" value="<?= $desde ?: '' ?>" class="form-control mr-2">
            <label for="hasta" class="mr-2">Hasta:</label>
            <input type="date" id="hasta" name="hasta" value="<?= $hasta ?: '' ?>" class="form-control mr-2">
            <button type="submit" class="btn btn-primary">Filtrar</button>
        <?php endif; ?>
    </form>

    <hr>

    <p><strong>Rango de Fechas:</strong> 
        <?= date('d-m-Y', strtotime($fecha_inicio)) ?> 
        al 
        <?= date('d-m-Y', strtotime($fecha_fin)) ?>
    </p>

    <!-- Gráfico 1: Cantidad de Ventas -->
    <h4>Cantidad de Ventas</h4>
    <canvas id="chartVentas"></canvas>
    <br>

    <!-- Gráfico 2: Monto Total de Ventas -->
    <h4>Total de Ventas (en $)</h4>
    <canvas id="chartTotales"></canvas>
    <br>

    <!-- Gráfico 3: Ticket Promedio -->
    <h4>Ticket Promedio (en $)</h4>
    <canvas id="chartPromedio"></canvas>
    <br>

    <script>
        // Datos en formato JS
        var labels = <?= json_encode($labels) ?>;
        var dataVentas = <?= json_encode($data_ventas) ?>;
        var dataTotales = <?= json_encode($data_totales) ?>;
        var dataPromedio = <?= json_encode($data_promedio) ?>;

        // Gráfico 1: Cantidad de Ventas
        var ctxVentas = document.getElementById('chartVentas').getContext('2d');
        var chartVentas = new Chart(ctxVentas, {
            type: 'bar',
            data: {
                labels: labels,
                datasets: [{
                    label: 'Cantidad de Ventas',
                    data: dataVentas,
                    backgroundColor: 'rgba(54, 162, 235, 0.5)',
                    borderColor: 'rgba(54, 162, 235, 1)',
                    borderWidth: 1
                }]
            },
            options: {
                responsive: true,
                scales: {
                    y: { beginAtZero: true }
                }
            }
        });

        // Gráfico 2: Monto Total
        var ctxTotales = document.getElementById('chartTotales').getContext('2d');
        var chartTotales = new Chart(ctxTotales, {
            type: 'bar',
            data: {
                labels: labels,
                datasets: [{
                    label: 'Monto Total ($)',
                    data: dataTotales,
                    backgroundColor: 'rgba(75, 192, 192, 0.5)',
                    borderColor: 'rgba(75, 192, 192, 1)',
                    borderWidth: 1
                }]
            },
            options: {
                responsive: true,
                scales: {
                    y: { beginAtZero: true }
                }
            }
        });

        // Gráfico 3: Ticket Promedio
        var ctxPromedio = document.getElementById('chartPromedio').getContext('2d');
        var chartPromedio = new Chart(ctxPromedio, {
            type: 'bar',
            data: {
                labels: labels,
                datasets: [{
                    label: 'Ticket Promedio ($)',
                    data: dataPromedio,
                    backgroundColor: 'rgba(255, 206, 86, 0.5)',
                    borderColor: 'rgba(255, 206, 86, 1)',
                    borderWidth: 1
                }]
            },
            options: {
                responsive: true,
                scales: {
                    y: { beginAtZero: true }
                }
            }
        });
    </script>

    <hr>
    <h3>Resumen Detallado</h3>
    <ul>
        <?php foreach ($lista_resultados as $res) { ?>
            <li>
                <strong><?= $res['periodo'] ?></strong><br>
                Ventas: <?= $res['ventas'] ?><br>
                Total: $<?= number_format($res['total'], 2) ?><br>
                Promedio Venta: $<?= number_format($res['promedio'], 2) ?>
            </li>
            <hr>
        <?php } ?>
    </ul>

    <h4>Resumen Global</h4>
    <p>
        <strong>Total Ventas:</strong> <?= $total_ventas ?><br>
        <strong>Monto Acumulado:</strong> $<?= number_format($total_montos, 2) ?><br>
        <strong>Ticket Promedio General:</strong> $<?= number_format($total_promedio, 2) ?>
    </p>

</div>
</body>
</html>
