<?php
$pageTitle = 'Reportes de Temperatura';
require_once __DIR__ . '/../../config/config.php';
requireLogin();

$db = getDB();

// Filtros
$equipo_id = intval($_GET['equipo_id'] ?? 0);
$fecha_desde = $_GET['fecha_desde'] ?? date('Y-m-01');
$fecha_hasta = $_GET['fecha_hasta'] ?? date('Y-m-d');
$imprimir = isset($_GET['print']);

// Obtener equipos
$equipos = $db->query("SELECT * FROM equipos_refrigeracion WHERE activo = 1 ORDER BY nombre")->fetchAll();

// Si no hay equipo seleccionado, usar el primero
if (!$equipo_id && count($equipos) > 0) {
    $equipo_id = $equipos[0]['id'];
}

// Obtener datos del equipo
$stmt = $db->prepare("SELECT * FROM equipos_refrigeracion WHERE id = ?");
$stmt->execute([$equipo_id]);
$equipo = $stmt->fetch();

// Estadísticas del período
$stmt = $db->prepare("
    SELECT 
        COUNT(*) as total,
        SUM(CASE WHEN estado = 'Normal' THEN 1 ELSE 0 END) as normales,
        SUM(CASE WHEN estado IN ('Alto', 'Bajo') THEN 1 ELSE 0 END) as alertas,
        SUM(CASE WHEN estado = 'Critico' THEN 1 ELSE 0 END) as criticos,
        ROUND(AVG(temperatura), 2) as temp_promedio,
        ROUND(STDDEV(temperatura), 2) as temp_desviacion,
        MIN(temperatura) as temp_min,
        MAX(temperatura) as temp_max
    FROM registros_temperatura
    WHERE equipo_id = ? AND fecha BETWEEN ? AND ?
");
$stmt->execute([$equipo_id, $fecha_desde, $fecha_hasta]);
$stats = $stmt->fetch();

// Datos para gráfica - por día
$stmt = $db->prepare("
    SELECT fecha, 
           ROUND(AVG(temperatura), 1) as temp_promedio,
           MIN(temperatura) as temp_min,
           MAX(temperatura) as temp_max,
           COUNT(*) as registros
    FROM registros_temperatura
    WHERE equipo_id = ? AND fecha BETWEEN ? AND ?
    GROUP BY fecha
    ORDER BY fecha
");
$stmt->execute([$equipo_id, $fecha_desde, $fecha_hasta]);
$datosDiarios = $stmt->fetchAll();

// Registros fuera de rango
$stmt = $db->prepare("
    SELECT r.*, u.nombre as operador_nombre
    FROM registros_temperatura r
    LEFT JOIN usuarios u ON r.operador_id = u.id
    WHERE r.equipo_id = ? 
    AND r.fecha BETWEEN ? AND ?
    AND r.estado != 'Normal'
    ORDER BY r.fecha DESC, r.hora DESC
");
$stmt->execute([$equipo_id, $fecha_desde, $fecha_hasta]);
$desviaciones = $stmt->fetchAll();

// Preparar datos para Chart.js
$labels = [];
$promedios = [];
$minimos = [];
$maximos = [];

foreach ($datosDiarios as $d) {
    $labels[] = date('d/m', strtotime($d['fecha']));
    $promedios[] = $d['temp_promedio'];
    $minimos[] = $d['temp_min'];
    $maximos[] = $d['temp_max'];
}

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

<?php if (!$imprimir): ?>
<div class="row mb-4">
    <div class="col-12">
        <nav aria-label="breadcrumb">
            <ol class="breadcrumb">
                <li class="breadcrumb-item"><a href="list.php">Control de Temperatura</a></li>
                <li class="breadcrumb-item active">Reportes</li>
            </ol>
        </nav>
        <h2><i class="bi bi-file-earmark-bar-graph me-2"></i>Reportes de Temperatura</h2>
    </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">Equipo</label>
                <select name="equipo_id" class="form-select" required>
                    <?php foreach ($equipos as $eq): ?>
                    <option value="<?= $eq['id'] ?>" <?= $equipo_id == $eq['id'] ? 'selected' : '' ?>>
                        <?= $eq['tipo'] == 'Refrigeradora' ? '🧊' : '❄️' ?>
                        <?= htmlspecialchars($eq['nombre']) ?>
                    </option>
                    <?php endforeach; ?>
                </select>
            </div>
            <div class="col-md-3">
                <label class="form-label">Desde</label>
                <input type="date" name="fecha_desde" class="form-control" value="<?= $fecha_desde ?>">
            </div>
            <div class="col-md-3">
                <label class="form-label">Hasta</label>
                <input type="date" name="fecha_hasta" class="form-control" value="<?= $fecha_hasta ?>">
            </div>
            <div class="col-md-2 d-flex align-items-end">
                <button type="submit" class="btn btn-primary me-2">
                    <i class="bi bi-search"></i> Generar
                </button>
            </div>
        </form>
    </div>
</div>
<?php endif; ?>

<?php if ($equipo): ?>
<!-- Encabezado del reporte -->
<div class="card mb-4">
    <div class="card-header bg-primary text-white d-flex justify-content-between align-items-center">
        <h5 class="mb-0">
            <?= $equipo['tipo'] == 'Refrigeradora' ? '🧊' : '❄️' ?>
            Reporte: <?= htmlspecialchars($equipo['nombre']) ?>
        </h5>
        <?php if (!$imprimir): ?>
        <button onclick="window.print()" class="btn btn-light btn-sm">
            <i class="bi bi-printer"></i> Imprimir
        </button>
        <?php endif; ?>
    </div>
    <div class="card-body">
        <div class="row">
            <div class="col-md-6">
                <p><strong>Código:</strong> <?= $equipo['codigo'] ?></p>
                <p><strong>Tipo:</strong> <?= $equipo['tipo'] ?></p>
                <p><strong>Ubicación:</strong> <?= $equipo['ubicacion'] ?? 'N/A' ?></p>
            </div>
            <div class="col-md-6">
                <p><strong>Período:</strong> <?= date('d/m/Y', strtotime($fecha_desde)) ?> al <?= date('d/m/Y', strtotime($fecha_hasta)) ?></p>
                <p><strong>Rango aceptable:</strong> <span class="text-success fw-bold"><?= $equipo['temp_minima'] ?>°C a <?= $equipo['temp_maxima'] ?>°C</span></p>
                <p><strong>Generado:</strong> <?= date('d/m/Y H:i') ?></p>
            </div>
        </div>
    </div>
</div>

<!-- Estadísticas -->
<div class="row mb-4">
    <div class="col-md-2">
        <div class="card bg-light">
            <div class="card-body text-center">
                <h3 class="mb-0"><?= number_format($stats['total']) ?></h3>
                <small>Total Registros</small>
            </div>
        </div>
    </div>
    <div class="col-md-2">
        <div class="card bg-success text-white">
            <div class="card-body text-center">
                <h3 class="mb-0"><?= number_format($stats['normales']) ?></h3>
                <small>Normales</small>
                <?php if ($stats['total'] > 0): ?>
                <br><small>(<?= round($stats['normales']/$stats['total']*100, 1) ?>%)</small>
                <?php endif; ?>
            </div>
        </div>
    </div>
    <div class="col-md-2">
        <div class="card bg-warning">
            <div class="card-body text-center">
                <h3 class="mb-0"><?= number_format($stats['alertas']) ?></h3>
                <small>Alertas</small>
            </div>
        </div>
    </div>
    <div class="col-md-2">
        <div class="card bg-danger text-white">
            <div class="card-body text-center">
                <h3 class="mb-0"><?= number_format($stats['criticos']) ?></h3>
                <small>Críticos</small>
            </div>
        </div>
    </div>
    <div class="col-md-2">
        <div class="card bg-info text-white">
            <div class="card-body text-center">
                <h3 class="mb-0"><?= $stats['temp_promedio'] ?? '-' ?>°C</h3>
                <small>Promedio</small>
            </div>
        </div>
    </div>
    <div class="col-md-2">
        <div class="card bg-secondary text-white">
            <div class="card-body text-center">
                <h3 class="mb-0">±<?= $stats['temp_desviacion'] ?? '-' ?>°C</h3>
                <small>Desv. Est.</small>
            </div>
        </div>
    </div>
</div>

<!-- Gráfica de tendencia -->
<?php if (count($datosDiarios) > 0): ?>
<div class="card mb-4">
    <div class="card-header">
        <h5 class="mb-0"><i class="bi bi-graph-up me-2"></i>Tendencia de Temperatura</h5>
    </div>
    <div class="card-body">
        <canvas id="chartTemperatura" height="100"></canvas>
    </div>
</div>
<?php endif; ?>

<!-- Desviaciones -->
<?php if (count($desviaciones) > 0): ?>
<div class="card mb-4">
    <div class="card-header bg-warning">
        <h5 class="mb-0"><i class="bi bi-exclamation-triangle me-2"></i>Desviaciones Registradas (<?= count($desviaciones) ?>)</h5>
    </div>
    <div class="card-body">
        <div class="table-responsive">
            <table class="table table-sm table-striped">
                <thead>
                    <tr>
                        <th>Fecha/Hora</th>
                        <th>Temperatura</th>
                        <th>Estado</th>
                        <th>Operador</th>
                        <th>Acción Correctiva</th>
                    </tr>
                </thead>
                <tbody>
                    <?php foreach ($desviaciones as $d): 
                        $clase = $d['estado'] == 'Critico' ? 'danger' : 'warning';
                    ?>
                    <tr>
                        <td><?= date('d/m/Y', strtotime($d['fecha'])) ?> <?= $d['hora'] ?></td>
                        <td><span class="fw-bold text-<?= $clase ?>"><?= $d['temperatura'] ?>°C</span></td>
                        <td><span class="badge bg-<?= $clase ?>"><?= $d['estado'] ?></span></td>
                        <td><?= htmlspecialchars($d['operador_nombre'] ?? 'N/A') ?></td>
                        <td><?= htmlspecialchars($d['accion_correctiva'] ?? 'No documentada') ?></td>
                    </tr>
                    <?php endforeach; ?>
                </tbody>
            </table>
        </div>
    </div>
</div>
<?php endif; ?>

<!-- Resumen diario -->
<?php if (count($datosDiarios) > 0): ?>
<div class="card mb-4">
    <div class="card-header">
        <h5 class="mb-0"><i class="bi bi-calendar-day me-2"></i>Resumen por Día</h5>
    </div>
    <div class="card-body">
        <div class="table-responsive">
            <table class="table table-sm table-striped">
                <thead class="table-dark">
                    <tr>
                        <th>Fecha</th>
                        <th class="text-center">Registros</th>
                        <th class="text-center">Promedio</th>
                        <th class="text-center">Mínima</th>
                        <th class="text-center">Máxima</th>
                        <th class="text-center">Estado</th>
                    </tr>
                </thead>
                <tbody>
                    <?php foreach ($datosDiarios as $d): 
                        $dentroRango = $d['temp_min'] >= $equipo['temp_minima'] && $d['temp_max'] <= $equipo['temp_maxima'];
                    ?>
                    <tr>
                        <td><?= date('d/m/Y', strtotime($d['fecha'])) ?></td>
                        <td class="text-center"><?= $d['registros'] ?></td>
                        <td class="text-center"><?= $d['temp_promedio'] ?>°C</td>
                        <td class="text-center"><?= $d['temp_min'] ?>°C</td>
                        <td class="text-center"><?= $d['temp_max'] ?>°C</td>
                        <td class="text-center">
                            <?php if ($dentroRango): ?>
                                <span class="badge bg-success">✓ OK</span>
                            <?php else: ?>
                                <span class="badge bg-warning">⚠ Desviación</span>
                            <?php endif; ?>
                        </td>
                    </tr>
                    <?php endforeach; ?>
                </tbody>
            </table>
        </div>
    </div>
</div>
<?php endif; ?>

<!-- Firma -->
<div class="row mt-5 mb-4">
    <div class="col-md-4 offset-md-4 text-center">
        <hr style="border-top: 1px solid #000;">
        <p>Responsable del Control</p>
    </div>
</div>

<?php endif; ?>

<?php if (count($datosDiarios) > 0 && !$imprimir): ?>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
    const ctx = document.getElementById('chartTemperatura').getContext('2d');
    
    new Chart(ctx, {
        type: 'line',
        data: {
            labels: <?= json_encode($labels) ?>,
            datasets: [
                {
                    label: 'Temperatura Promedio',
                    data: <?= json_encode($promedios) ?>,
                    borderColor: '#0d6efd',
                    backgroundColor: 'rgba(13, 110, 253, 0.1)',
                    fill: true,
                    tension: 0.3
                },
                {
                    label: 'Mínima',
                    data: <?= json_encode($minimos) ?>,
                    borderColor: '#198754',
                    borderDash: [5, 5],
                    fill: false
                },
                {
                    label: 'Máxima',
                    data: <?= json_encode($maximos) ?>,
                    borderColor: '#dc3545',
                    borderDash: [5, 5],
                    fill: false
                }
            ]
        },
        options: {
            responsive: true,
            plugins: {
                annotation: {
                    annotations: {
                        rangoMin: {
                            type: 'line',
                            yMin: <?= $equipo['temp_minima'] ?>,
                            yMax: <?= $equipo['temp_minima'] ?>,
                            borderColor: 'rgba(25, 135, 84, 0.5)',
                            borderWidth: 2,
                            borderDash: [10, 5],
                            label: { content: 'Mín aceptable', enabled: true }
                        },
                        rangoMax: {
                            type: 'line',
                            yMin: <?= $equipo['temp_maxima'] ?>,
                            yMax: <?= $equipo['temp_maxima'] ?>,
                            borderColor: 'rgba(220, 53, 69, 0.5)',
                            borderWidth: 2,
                            borderDash: [10, 5],
                            label: { content: 'Máx aceptable', enabled: true }
                        }
                    }
                }
            },
            scales: {
                y: {
                    title: { display: true, text: 'Temperatura (°C)' }
                }
            }
        }
    });
});
</script>
<?php endif; ?>

<style>
@media print {
    .no-print { display: none !important; }
    .card { border: 1px solid #ddd !important; }
    .card-header { background-color: #f8f9fa !important; color: #000 !important; }
}
</style>

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