<?php
$pageTitle = 'Reporte Mensual';
require_once __DIR__ . '/../../config/config.php';
requireLogin();

if ($_SESSION['rol'] != 'admin') {
    showAlert('No tiene permisos para acceder a esta sección', 'danger');
    header('Location: ' . SITE_URL);
    exit;
}

$db = getDB();

// Obtener mes seleccionado o actual
$mes = $_GET['mes'] ?? date('Y-m');
$fechaInicio = $mes . '-01';
$fechaFin = date('Y-m-t', strtotime($fechaInicio));

// Nombre del mes
$mesesNombres = [
    '01' => 'Enero', '02' => 'Febrero', '03' => 'Marzo', '04' => 'Abril',
    '05' => 'Mayo', '06' => 'Junio', '07' => 'Julio', '08' => 'Agosto',
    '09' => 'Septiembre', '10' => 'Octubre', '11' => 'Noviembre', '12' => 'Diciembre'
];
$mesNumero = substr($mes, 5, 2);
$yearMes = substr($mes, 0, 4);
$nombreMes = $mesesNombres[$mesNumero] . ' ' . $yearMes;

// Estadísticas del mes
$stmt = $db->prepare("SELECT COUNT(*) FROM ordenes WHERE DATE(fecha_orden) BETWEEN ? AND ?");
$stmt->execute([$fechaInicio, $fechaFin]);
$totalOrdenes = $stmt->fetchColumn();

$stmt = $db->prepare("SELECT COALESCE(SUM(total), 0) FROM ordenes WHERE DATE(fecha_orden) BETWEEN ? AND ?");
$stmt->execute([$fechaInicio, $fechaFin]);
$totalVentas = $stmt->fetchColumn();

$stmt = $db->prepare("SELECT COALESCE(SUM(monto), 0) FROM pagos WHERE DATE(fecha_pago) BETWEEN ? AND ?");
$stmt->execute([$fechaInicio, $fechaFin]);
$totalCobrado = $stmt->fetchColumn();

$stmt = $db->prepare("SELECT COUNT(*) FROM pacientes WHERE DATE(created_at) BETWEEN ? AND ?");
$stmt->execute([$fechaInicio, $fechaFin]);
$pacientesNuevos = $stmt->fetchColumn();

$stmt = $db->prepare("SELECT COUNT(DISTINCT paciente_id) FROM ordenes WHERE DATE(fecha_orden) BETWEEN ? AND ?");
$stmt->execute([$fechaInicio, $fechaFin]);
$pacientesAtendidos = $stmt->fetchColumn();

// Órdenes por semana del mes
$stmt = $db->prepare("
    SELECT WEEK(fecha_orden, 1) as semana, MIN(DATE(fecha_orden)) as inicio, 
           COUNT(*) as total, SUM(total) as monto
    FROM ordenes 
    WHERE DATE(fecha_orden) BETWEEN ? AND ?
    GROUP BY WEEK(fecha_orden, 1)
    ORDER BY semana
");
$stmt->execute([$fechaInicio, $fechaFin]);
$ordenesPorSemana = $stmt->fetchAll();

// Órdenes por día del mes
$stmt = $db->prepare("
    SELECT DAY(fecha_orden) as dia, COUNT(*) as total, SUM(total) as monto
    FROM ordenes 
    WHERE DATE(fecha_orden) BETWEEN ? AND ?
    GROUP BY DAY(fecha_orden)
    ORDER BY dia
");
$stmt->execute([$fechaInicio, $fechaFin]);
$ordenesPorDia = $stmt->fetchAll();

// Preparar datos para el gráfico (todos los días del mes)
$diasDelMes = [];
$totalPorDia = [];
$ultimoDia = intval(date('d', strtotime($fechaFin)));
for ($i = 1; $i <= $ultimoDia; $i++) {
    $diasDelMes[] = $i;
    $totalPorDia[$i] = 0;
}
foreach ($ordenesPorDia as $d) {
    $totalPorDia[$d['dia']] = $d['total'];
}

// Exámenes más solicitados
$stmt = $db->prepare("
    SELECT e.nombre, COUNT(od.id) as total, SUM(od.precio) as monto
    FROM orden_detalle od
    JOIN examenes e ON od.examen_id = e.id
    JOIN ordenes o ON od.orden_id = o.id
    WHERE DATE(o.fecha_orden) BETWEEN ? AND ?
    GROUP BY e.id
    ORDER BY total DESC
    LIMIT 10
");
$stmt->execute([$fechaInicio, $fechaFin]);
$examenesTop = $stmt->fetchAll();

// Comparación con mes anterior
$mesAnterior = date('Y-m', strtotime($fechaInicio . ' -1 month'));
$fechaInicioAnt = $mesAnterior . '-01';
$fechaFinAnt = date('Y-m-t', strtotime($fechaInicioAnt));

$stmt = $db->prepare("SELECT COUNT(*) FROM ordenes WHERE DATE(fecha_orden) BETWEEN ? AND ?");
$stmt->execute([$fechaInicioAnt, $fechaFinAnt]);
$ordenesAnt = $stmt->fetchColumn();

$stmt = $db->prepare("SELECT COALESCE(SUM(monto), 0) FROM pagos WHERE DATE(fecha_pago) BETWEEN ? AND ?");
$stmt->execute([$fechaInicioAnt, $fechaFinAnt]);
$ingresosAnt = $stmt->fetchColumn();

// Calcular variaciones
$varOrdenes = $ordenesAnt > 0 ? (($totalOrdenes - $ordenesAnt) / $ordenesAnt) * 100 : 0;
$varIngresos = $ingresosAnt > 0 ? (($totalCobrado - $ingresosAnt) / $ingresosAnt) * 100 : 0;

require_once __DIR__ . '/../../includes/header.php';
?>

<div class="d-flex justify-content-between align-items-center mt-4 mb-4">
    <h2><i class="bi bi-calendar-month"></i> Reporte Mensual</h2>
    <div class="d-flex gap-2 align-items-center">
        <form method="GET" class="d-flex gap-2">
            <input type="month" name="mes" class="form-control" value="<?= $mes ?>">
            <button type="submit" class="btn btn-primary">
                <i class="bi bi-search"></i>
            </button>
        </form>
        <button onclick="window.print()" class="btn btn-outline-secondary">
            <i class="bi bi-printer"></i>
        </button>
        <a href="index.php" class="btn btn-outline-secondary">
            <i class="bi bi-arrow-left"></i> Volver
        </a>
    </div>
</div>

<div class="alert alert-info">
    <i class="bi bi-calendar3"></i> Reporte de <strong><?= $nombreMes ?></strong>
</div>

<!-- Tarjetas de resumen -->
<div class="row mb-4">
    <div class="col-md-2">
        <div class="card bg-primary text-white">
            <div class="card-body text-center py-3">
                <h6 class="mb-1">Total Órdenes</h6>
                <h3 class="mb-0"><?= $totalOrdenes ?></h3>
                <?php if ($varOrdenes != 0): ?>
                <small class="<?= $varOrdenes > 0 ? 'text-warning' : 'text-light' ?>">
                    <i class="bi bi-arrow-<?= $varOrdenes > 0 ? 'up' : 'down' ?>"></i>
                    <?= number_format(abs($varOrdenes), 1) ?>% vs mes ant.
                </small>
                <?php endif; ?>
            </div>
        </div>
    </div>
    <div class="col-md-2">
        <div class="card bg-success text-white">
            <div class="card-body text-center py-3">
                <h6 class="mb-1">Total Ventas</h6>
                <h3 class="mb-0"><?= formatMoney($totalVentas) ?></h3>
            </div>
        </div>
    </div>
    <div class="col-md-2">
        <div class="card bg-info text-white">
            <div class="card-body text-center py-3">
                <h6 class="mb-1">Total Cobrado</h6>
                <h3 class="mb-0"><?= formatMoney($totalCobrado) ?></h3>
                <?php if ($varIngresos != 0): ?>
                <small class="<?= $varIngresos > 0 ? 'text-warning' : 'text-light' ?>">
                    <i class="bi bi-arrow-<?= $varIngresos > 0 ? 'up' : 'down' ?>"></i>
                    <?= number_format(abs($varIngresos), 1) ?>% vs mes ant.
                </small>
                <?php endif; ?>
            </div>
        </div>
    </div>
    <div class="col-md-2">
        <div class="card bg-warning text-dark">
            <div class="card-body text-center py-3">
                <h6 class="mb-1">Pendiente Cobro</h6>
                <h3 class="mb-0"><?= formatMoney($totalVentas - $totalCobrado) ?></h3>
            </div>
        </div>
    </div>
    <div class="col-md-2">
        <div class="card bg-secondary text-white">
            <div class="card-body text-center py-3">
                <h6 class="mb-1">Pacientes Nuevos</h6>
                <h3 class="mb-0"><?= $pacientesNuevos ?></h3>
            </div>
        </div>
    </div>
    <div class="col-md-2">
        <div class="card bg-dark text-white">
            <div class="card-body text-center py-3">
                <h6 class="mb-1">Pacientes Atendidos</h6>
                <h3 class="mb-0"><?= $pacientesAtendidos ?></h3>
            </div>
        </div>
    </div>
</div>

<div class="row">
    <!-- Gráfico del mes -->
    <div class="col-md-8">
        <div class="card mb-4">
            <div class="card-header">
                <h5 class="mb-0"><i class="bi bi-graph-up"></i> Órdenes por Día</h5>
            </div>
            <div class="card-body">
                <canvas id="chartMensual" height="100"></canvas>
            </div>
        </div>
        
        <div class="card mb-4">
            <div class="card-header">
                <h5 class="mb-0"><i class="bi bi-table"></i> Resumen por Semana</h5>
            </div>
            <div class="card-body">
                <table class="table table-bordered">
                    <thead>
                        <tr>
                            <th>Semana</th>
                            <th>Inicia</th>
                            <th class="text-center">Órdenes</th>
                            <th class="text-end">Monto</th>
                            <th class="text-end">Promedio/Orden</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php foreach ($ordenesPorSemana as $i => $semana): ?>
                        <tr>
                            <td>Semana <?= $i + 1 ?></td>
                            <td><?= formatDate($semana['inicio']) ?></td>
                            <td class="text-center"><span class="badge bg-primary"><?= $semana['total'] ?></span></td>
                            <td class="text-end"><?= formatMoney($semana['monto']) ?></td>
                            <td class="text-end"><?= formatMoney($semana['monto'] / max($semana['total'], 1)) ?></td>
                        </tr>
                        <?php endforeach; ?>
                        <?php if (empty($ordenesPorSemana)): ?>
                        <tr><td colspan="5" class="text-center text-muted">Sin datos</td></tr>
                        <?php endif; ?>
                    </tbody>
                    <tfoot class="table-light">
                        <tr>
                            <th colspan="2">Total</th>
                            <th class="text-center"><?= $totalOrdenes ?></th>
                            <th class="text-end"><?= formatMoney($totalVentas) ?></th>
                            <th class="text-end"><?= formatMoney($totalVentas / max($totalOrdenes, 1)) ?></th>
                        </tr>
                    </tfoot>
                </table>
            </div>
        </div>
    </div>
    
    <!-- Panel lateral -->
    <div class="col-md-4">
        <div class="card mb-4">
            <div class="card-header">
                <h5 class="mb-0"><i class="bi bi-trophy"></i> Top 10 Exámenes</h5>
            </div>
            <div class="card-body">
                <table class="table table-sm">
                    <thead>
                        <tr>
                            <th>Examen</th>
                            <th class="text-center">Cant.</th>
                            <th class="text-end">Monto</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php foreach ($examenesTop as $i => $ex): ?>
                        <tr>
                            <td><small><?= ($i + 1) ?>. <?= htmlspecialchars($ex['nombre']) ?></small></td>
                            <td class="text-center"><span class="badge bg-primary"><?= $ex['total'] ?></span></td>
                            <td class="text-end"><small><?= formatMoney($ex['monto']) ?></small></td>
                        </tr>
                        <?php endforeach; ?>
                        <?php if (empty($examenesTop)): ?>
                        <tr><td colspan="3" class="text-center text-muted">Sin datos</td></tr>
                        <?php endif; ?>
                    </tbody>
                </table>
            </div>
        </div>
        
        <div class="card mb-4">
            <div class="card-header">
                <h5 class="mb-0"><i class="bi bi-calculator"></i> Promedios</h5>
            </div>
            <div class="card-body">
                <table class="table table-sm">
                    <tr>
                        <td>Órdenes por día</td>
                        <td class="text-end"><strong><?= number_format($totalOrdenes / max($ultimoDia, 1), 1) ?></strong></td>
                    </tr>
                    <tr>
                        <td>Ingresos por día</td>
                        <td class="text-end"><strong><?= formatMoney($totalCobrado / max($ultimoDia, 1)) ?></strong></td>
                    </tr>
                    <tr>
                        <td>Valor promedio orden</td>
                        <td class="text-end"><strong><?= formatMoney($totalVentas / max($totalOrdenes, 1)) ?></strong></td>
                    </tr>
                </table>
            </div>
        </div>
    </div>
</div>

<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
const ctx = document.getElementById('chartMensual').getContext('2d');
new Chart(ctx, {
    type: 'line',
    data: {
        labels: [<?= implode(',', $diasDelMes) ?>],
        datasets: [{
            label: 'Órdenes',
            data: [<?= implode(',', array_values($totalPorDia)) ?>],
            borderColor: 'rgba(102, 126, 234, 1)',
            backgroundColor: 'rgba(102, 126, 234, 0.1)',
            fill: true,
            tension: 0.3
        }]
    },
    options: {
        responsive: true,
        scales: { 
            y: { beginAtZero: true },
            x: { title: { display: true, text: 'Día del mes' } }
        },
        plugins: { legend: { display: false } }
    }
});
</script>

<?php require_once __DIR__ . '/../../includes/footer.php'; ?>
