<?php
$pageTitle = 'Reporte de Pacientes';
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();

// Filtros
$fecha_inicio = $_GET['fecha_inicio'] ?? date('Y-m-01');
$fecha_fin = $_GET['fecha_fin'] ?? date('Y-m-d');

// Estadísticas generales
$stmt = $db->query("SELECT COUNT(*) FROM pacientes");
$totalPacientes = $stmt->fetchColumn();

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

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

// Pacientes por sexo
$stmt = $db->query("SELECT sexo, COUNT(*) as total FROM pacientes GROUP BY sexo");
$pacientesPorSexo = $stmt->fetchAll();

// Pacientes por rango de edad
$stmt = $db->query("
    SELECT 
        CASE 
            WHEN TIMESTAMPDIFF(YEAR, fecha_nacimiento, CURDATE()) < 18 THEN '0-17 (Menores)'
            WHEN TIMESTAMPDIFF(YEAR, fecha_nacimiento, CURDATE()) BETWEEN 18 AND 30 THEN '18-30'
            WHEN TIMESTAMPDIFF(YEAR, fecha_nacimiento, CURDATE()) BETWEEN 31 AND 45 THEN '31-45'
            WHEN TIMESTAMPDIFF(YEAR, fecha_nacimiento, CURDATE()) BETWEEN 46 AND 60 THEN '46-60'
            ELSE '60+' 
        END as rango,
        COUNT(*) as total
    FROM pacientes 
    WHERE fecha_nacimiento IS NOT NULL
    GROUP BY rango
    ORDER BY rango
");
$pacientesPorEdad = $stmt->fetchAll();

// Pacientes más frecuentes
$stmt = $db->prepare("
    SELECT p.codigo, p.nombre, p.apellidos, p.telefono, COUNT(o.id) as total_ordenes, 
           SUM(o.total) as total_gastado, MAX(o.fecha_orden) as ultima_visita
    FROM pacientes p
    JOIN ordenes o ON p.id = o.paciente_id
    WHERE DATE(o.fecha_orden) BETWEEN ? AND ?
    GROUP BY p.id
    ORDER BY total_ordenes DESC
    LIMIT 20
");
$stmt->execute([$fecha_inicio, $fecha_fin]);
$pacientesFrecuentes = $stmt->fetchAll();

// Pacientes nuevos por mes (últimos 6 meses)
$stmt = $db->query("
    SELECT DATE_FORMAT(created_at, '%Y-%m') as mes, COUNT(*) as total
    FROM pacientes
    WHERE created_at >= DATE_SUB(CURDATE(), INTERVAL 6 MONTH)
    GROUP BY DATE_FORMAT(created_at, '%Y-%m')
    ORDER BY mes
");
$pacientesPorMes = $stmt->fetchAll();

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-people"></i> Reporte de Pacientes</h2>
    <div class="d-flex gap-2">
        <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>

<!-- Filtros -->
<div class="card mb-4 no-print">
    <div class="card-body">
        <form method="GET" class="row g-3">
            <div class="col-md-4">
                <label class="form-label">Fecha Inicio</label>
                <input type="date" name="fecha_inicio" class="form-control" value="<?= $fecha_inicio ?>">
            </div>
            <div class="col-md-4">
                <label class="form-label">Fecha Fin</label>
                <input type="date" name="fecha_fin" class="form-control" value="<?= $fecha_fin ?>">
            </div>
            <div class="col-md-4 d-flex align-items-end">
                <button type="submit" class="btn btn-primary me-2">
                    <i class="bi bi-search"></i> Buscar
                </button>
                <a href="pacientes.php" class="btn btn-outline-secondary">Limpiar</a>
            </div>
        </form>
    </div>
</div>

<!-- Tarjetas de resumen -->
<div class="row mb-4">
    <div class="col-md-4">
        <div class="card bg-primary text-white">
            <div class="card-body text-center">
                <h6>Total Pacientes</h6>
                <h2><?= $totalPacientes ?></h2>
            </div>
        </div>
    </div>
    <div class="col-md-4">
        <div class="card bg-success text-white">
            <div class="card-body text-center">
                <h6>Pacientes Nuevos (período)</h6>
                <h2><?= $pacientesNuevos ?></h2>
            </div>
        </div>
    </div>
    <div class="col-md-4">
        <div class="card bg-info text-white">
            <div class="card-body text-center">
                <h6>Pacientes Atendidos (período)</h6>
                <h2><?= $pacientesAtendidos ?></h2>
            </div>
        </div>
    </div>
</div>

<div class="row">
    <!-- Gráficos -->
    <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> Pacientes Nuevos por Mes (últimos 6 meses)</h5>
            </div>
            <div class="card-body">
                <canvas id="chartPacientesMes" height="100"></canvas>
            </div>
        </div>
        
        <div class="card mb-4">
            <div class="card-header">
                <h5 class="mb-0"><i class="bi bi-star"></i> Top 20 Pacientes más Frecuentes</h5>
            </div>
            <div class="card-body">
                <div class="table-responsive">
                    <table class="table table-sm table-hover">
                        <thead>
                            <tr>
                                <th>#</th>
                                <th>Código</th>
                                <th>Paciente</th>
                                <th>Teléfono</th>
                                <th class="text-center">Órdenes</th>
                                <th class="text-end">Total Gastado</th>
                                <th>Última Visita</th>
                            </tr>
                        </thead>
                        <tbody>
                            <?php foreach ($pacientesFrecuentes as $i => $pac): ?>
                            <tr>
                                <td><?= $i + 1 ?></td>
                                <td><code><?= $pac['codigo'] ?></code></td>
                                <td><?= htmlspecialchars($pac['nombre'] . ' ' . $pac['apellidos']) ?></td>
                                <td><?= htmlspecialchars($pac['telefono'] ?? '-') ?></td>
                                <td class="text-center"><span class="badge bg-primary"><?= $pac['total_ordenes'] ?></span></td>
                                <td class="text-end"><?= formatMoney($pac['total_gastado']) ?></td>
                                <td><small><?= formatDate($pac['ultima_visita']) ?></small></td>
                            </tr>
                            <?php endforeach; ?>
                            <?php if (empty($pacientesFrecuentes)): ?>
                            <tr><td colspan="7" class="text-center text-muted">Sin datos en el período</td></tr>
                            <?php endif; ?>
                        </tbody>
                    </table>
                </div>
            </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-gender-ambiguous"></i> Distribución por Sexo</h5>
            </div>
            <div class="card-body">
                <canvas id="chartSexo" height="200"></canvas>
                <table class="table table-sm mt-3">
                    <?php foreach ($pacientesPorSexo as $sexo): ?>
                    <tr>
                        <td><?= $sexo['sexo'] == 'M' ? 'Masculino' : 'Femenino' ?></td>
                        <td class="text-end"><strong><?= $sexo['total'] ?></strong></td>
                    </tr>
                    <?php endforeach; ?>
                </table>
            </div>
        </div>
        
        <div class="card mb-4">
            <div class="card-header">
                <h5 class="mb-0"><i class="bi bi-calendar3"></i> Distribución por Edad</h5>
            </div>
            <div class="card-body">
                <table class="table table-sm">
                    <thead>
                        <tr>
                            <th>Rango</th>
                            <th class="text-end">Cantidad</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php foreach ($pacientesPorEdad as $edad): ?>
                        <tr>
                            <td><?= $edad['rango'] ?></td>
                            <td class="text-end"><span class="badge bg-secondary"><?= $edad['total'] ?></span></td>
                        </tr>
                        <?php endforeach; ?>
                        <?php if (empty($pacientesPorEdad)): ?>
                        <tr><td colspan="2" class="text-center text-muted">Sin datos</td></tr>
                        <?php endif; ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</div>

<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
// Gráfico de pacientes por mes
const ctxMes = document.getElementById('chartPacientesMes').getContext('2d');
new Chart(ctxMes, {
    type: 'bar',
    data: {
        labels: [<?php echo implode(',', array_map(function($d) { 
            return "'" . date('M Y', strtotime($d['mes'] . '-01')) . "'"; 
        }, $pacientesPorMes)); ?>],
        datasets: [{
            label: 'Pacientes Nuevos',
            data: [<?php echo implode(',', array_column($pacientesPorMes, 'total')); ?>],
            backgroundColor: 'rgba(40, 167, 69, 0.8)',
            borderColor: 'rgba(40, 167, 69, 1)',
            borderWidth: 1
        }]
    },
    options: {
        responsive: true,
        scales: { y: { beginAtZero: true } },
        plugins: { legend: { display: false } }
    }
});

// Gráfico de sexo
const ctxSexo = document.getElementById('chartSexo').getContext('2d');
new Chart(ctxSexo, {
    type: 'doughnut',
    data: {
        labels: [<?php echo implode(',', array_map(function($s) { 
            return "'" . ($s['sexo'] == 'M' ? 'Masculino' : 'Femenino') . "'"; 
        }, $pacientesPorSexo)); ?>],
        datasets: [{
            data: [<?php echo implode(',', array_column($pacientesPorSexo, 'total')); ?>],
            backgroundColor: ['rgba(54, 162, 235, 0.8)', 'rgba(255, 99, 132, 0.8)'],
            borderWidth: 1
        }]
    },
    options: {
        responsive: true,
        plugins: { legend: { position: 'bottom' } }
    }
});
</script>

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