<?php
$pageTitle = "Reportes de Control de Calidad";
require_once __DIR__ . '/../../config/config.php';
requirePermiso('control_calidad');

$db = Database::getInstance()->getConnection();

$accion = $_POST['accion'] ?? $_GET['accion'] ?? '';
$categoria_id = $_POST['categoria_id'] ?? $_GET['categoria_id'] ?? '';
$examen_id = $_POST['examen_id'] ?? $_GET['examen_id'] ?? '';
$lote_id = $_POST['lote_id'] ?? $_GET['lote_id'] ?? '';
$fecha_inicio = $_POST['fecha_inicio'] ?? $_GET['fecha_inicio'] ?? date('Y-m-01');
$fecha_fin = $_POST['fecha_fin'] ?? $_GET['fecha_fin'] ?? date('Y-m-d');

// Obtener catálogos
$categorias = $db->query("SELECT * FROM categorias_examen ORDER BY nombre")->fetchAll(PDO::FETCH_ASSOC);
$lotes = $db->query("SELECT * FROM cc_lotes ORDER BY codigo")->fetchAll(PDO::FETCH_ASSOC);

// Si se solicita crear un reporte
if ($accion == 'generar' && $_SERVER['REQUEST_METHOD'] == 'POST') {
    // Construir consulta según filtros
    $where = ["DATE(r.fecha_analisis) BETWEEN '$fecha_inicio' AND '$fecha_fin'"];
    
    if ($lote_id) {
        $where[] = "l.id = $lote_id";
    }
    if ($examen_id) {
        $where[] = "e.id = $examen_id";
    }
    if ($categoria_id) {
        $where[] = "e.categoria_id = $categoria_id";
    }
    
    // Obtener estadísticas por parámetro
    $sql = "SELECT 
                l.id as lote_id, l.codigo as lote_codigo, l.nombre as lote_nombre, l.nivel,
                e.id as examen_id, e.nombre as examen_nombre,
                c.nombre as categoria_nombre,
                pe.id as parametro_id, pe.nombre as parametro_nombre, pe.unidad,
                lp.id as lote_parametro_id, lp.valor_asignado, lp.desviacion_estandar,
                lp.rango_min, lp.rango_max, lp.tipo_resultado,
                COUNT(r.id) as n_controles,
                SUM(CASE WHEN r.estado = 'Aceptado' THEN 1 ELSE 0 END) as n_aceptados,
                SUM(CASE WHEN r.estado = 'Alerta' THEN 1 ELSE 0 END) as n_alertas,
                SUM(CASE WHEN r.estado = 'Rechazado' THEN 1 ELSE 0 END) as n_rechazados,
                AVG(CASE WHEN lp.tipo_resultado = 'numerico' THEN r.valor_obtenido END) as media_obtenida,
                MIN(CASE WHEN lp.tipo_resultado = 'numerico' THEN r.valor_obtenido END) as min_obtenido,
                MAX(CASE WHEN lp.tipo_resultado = 'numerico' THEN r.valor_obtenido END) as max_obtenido,
                STDDEV(CASE WHEN lp.tipo_resultado = 'numerico' THEN r.valor_obtenido END) as de_obtenida
            FROM cc_resultados r
            JOIN cc_lote_parametros lp ON r.lote_parametro_id = lp.id
            JOIN cc_lotes l ON lp.lote_id = l.id
            JOIN parametros_examen pe ON lp.parametro_id = pe.id
            JOIN examenes e ON pe.examen_id = e.id
            JOIN categorias_examen c ON e.categoria_id = c.id
            WHERE " . implode(" AND ", $where) . "
            GROUP BY lp.id
            ORDER BY c.nombre, e.nombre, pe.orden";
    
    $datosReporte = $db->query($sql)->fetchAll(PDO::FETCH_ASSOC);
    
    // Calcular totales
    $totales = [
        'controles' => 0,
        'aceptados' => 0,
        'alertas' => 0,
        'rechazados' => 0
    ];
    
    foreach ($datosReporte as &$row) {
        $totales['controles'] += $row['n_controles'];
        $totales['aceptados'] += $row['n_aceptados'];
        $totales['alertas'] += $row['n_alertas'];
        $totales['rechazados'] += $row['n_rechazados'];
        
        // Calcular métricas adicionales
        if ($row['media_obtenida'] && $row['de_obtenida']) {
            $row['cv'] = ($row['de_obtenida'] / $row['media_obtenida']) * 100;
            $row['sesgo'] = $row['media_obtenida'] - $row['valor_asignado'];
            $row['sesgo_pct'] = ($row['sesgo'] / $row['valor_asignado']) * 100;
        }
        
        $row['pct_aceptacion'] = $row['n_controles'] > 0 ? ($row['n_aceptados'] / $row['n_controles']) * 100 : 0;
    }
}

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

<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 Calidad</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 Control de Calidad</h2>
    </div>
</div>

<!-- Formulario de filtros -->
<div class="card mb-4">
    <div class="card-header">
        <h5 class="mb-0"><i class="bi bi-funnel me-2"></i>Generar Reporte</h5>
    </div>
    <div class="card-body">
        <form method="POST" id="formReporte">
            <input type="hidden" name="accion" value="generar">
            <div class="row g-3">
                <div class="col-md-3">
                    <label class="form-label">Lote de Control</label>
                    <select name="lote_id" class="form-select">
                        <option value="">-- Todos los lotes --</option>
                        <?php foreach ($lotes as $l): ?>
                        <option value="<?= $l['id'] ?>" <?= $lote_id == $l['id'] ? 'selected' : '' ?>>
                            <?= htmlspecialchars($l['codigo']) ?> - <?= htmlspecialchars($l['nombre']) ?>
                        </option>
                        <?php endforeach; ?>
                    </select>
                </div>
                <div class="col-md-3">
                    <label class="form-label">Categoría</label>
                    <select name="categoria_id" id="categoria_id" class="form-select">
                        <option value="">-- Todas las categorías --</option>
                        <?php foreach ($categorias as $c): ?>
                        <option value="<?= $c['id'] ?>" <?= $categoria_id == $c['id'] ? 'selected' : '' ?>>
                            <?= htmlspecialchars($c['nombre']) ?>
                        </option>
                        <?php endforeach; ?>
                    </select>
                </div>
                <div class="col-md-2">
                    <label class="form-label">Examen</label>
                    <select name="examen_id" id="examen_id" class="form-select">
                        <option value="">-- Todos --</option>
                    </select>
                </div>
                <div class="col-md-2">
                    <label class="form-label">Fecha Inicio</label>
                    <input type="date" name="fecha_inicio" class="form-control" value="<?= $fecha_inicio ?>">
                </div>
                <div class="col-md-2">
                    <label class="form-label">Fecha Fin</label>
                    <input type="date" name="fecha_fin" class="form-control" value="<?= $fecha_fin ?>">
                </div>
            </div>
            <div class="mt-3">
                <button type="submit" class="btn btn-primary">
                    <i class="bi bi-file-earmark-bar-graph me-1"></i> Generar Reporte
                </button>
                <?php if (!empty($datosReporte)): ?>
                <button type="button" class="btn btn-success ms-2" onclick="exportarPDF()">
                    <i class="bi bi-file-pdf me-1"></i> Exportar PDF
                </button>
                <button type="button" class="btn btn-outline-success ms-2" onclick="exportarExcel()">
                    <i class="bi bi-file-excel me-1"></i> Exportar Excel
                </button>
                <button type="button" class="btn btn-outline-info ms-2" onclick="window.print()">
                    <i class="bi bi-printer me-1"></i> Imprimir
                </button>
                <?php endif; ?>
            </div>
        </form>
    </div>
</div>

<?php if (!empty($datosReporte)): ?>
<!-- Reporte -->
<div class="card" id="reporteContainer">
    <div class="card-header bg-primary text-white d-print-none">
        <h5 class="mb-0">
            <i class="bi bi-clipboard-data me-2"></i>
            Reporte de Control de Calidad
        </h5>
    </div>
    
    <!-- Encabezado impresión -->
    <div class="d-none d-print-block p-4 border-bottom">
        <div class="row align-items-center">
            <div class="col-3 text-center">
                <img src="../../assets/logo.png" alt="Logo" style="max-height: 60px;" onerror="this.style.display='none'">
            </div>
            <div class="col-6 text-center">
                <h4>REPORTE DE CONTROL DE CALIDAD INTERNO</h4>
                <p class="mb-0">Período: <?= date('d/m/Y', strtotime($fecha_inicio)) ?> al <?= date('d/m/Y', strtotime($fecha_fin)) ?></p>
            </div>
            <div class="col-3 text-center">
                <small>Fecha: <?= date('d/m/Y H:i') ?></small>
            </div>
        </div>
    </div>
    
    <div class="card-body">
        <!-- Resumen global -->
        <div class="row mb-4">
            <div class="col-md-3">
                <div class="card bg-light">
                    <div class="card-body text-center">
                        <h3><?= $totales['controles'] ?></h3>
                        <p class="mb-0">Total Controles</p>
                    </div>
                </div>
            </div>
            <div class="col-md-3">
                <div class="card bg-success text-white">
                    <div class="card-body text-center">
                        <h3><?= $totales['aceptados'] ?> (<?= $totales['controles'] > 0 ? round($totales['aceptados']/$totales['controles']*100, 1) : 0 ?>%)</h3>
                        <p class="mb-0">Aceptados</p>
                    </div>
                </div>
            </div>
            <div class="col-md-3">
                <div class="card bg-warning">
                    <div class="card-body text-center">
                        <h3><?= $totales['alertas'] ?> (<?= $totales['controles'] > 0 ? round($totales['alertas']/$totales['controles']*100, 1) : 0 ?>%)</h3>
                        <p class="mb-0">Alertas</p>
                    </div>
                </div>
            </div>
            <div class="col-md-3">
                <div class="card bg-danger text-white">
                    <div class="card-body text-center">
                        <h3><?= $totales['rechazados'] ?> (<?= $totales['controles'] > 0 ? round($totales['rechazados']/$totales['controles']*100, 1) : 0 ?>%)</h3>
                        <p class="mb-0">Rechazados</p>
                    </div>
                </div>
            </div>
        </div>
        
        <!-- Tabla detallada -->
        <div class="table-responsive">
            <table class="table table-bordered table-sm" id="tablaReporte">
                <thead class="table-dark">
                    <tr>
                        <th rowspan="2">Categoría / Examen / Parámetro</th>
                        <th rowspan="2">Lote</th>
                        <th rowspan="2">Nivel</th>
                        <th colspan="2" class="text-center">Valor Asignado</th>
                        <th rowspan="2">N</th>
                        <th colspan="3" class="text-center">Resultados</th>
                        <th colspan="2" class="text-center">Estadísticas</th>
                        <th rowspan="2">% Acept.</th>
                    </tr>
                    <tr>
                        <th>Media</th>
                        <th>DE</th>
                        <th class="text-success">✓</th>
                        <th class="text-warning">!</th>
                        <th class="text-danger">✗</th>
                        <th>CV%</th>
                        <th>Sesgo%</th>
                    </tr>
                </thead>
                <tbody>
                    <?php 
                    $currentCategoria = '';
                    $currentExamen = '';
                    foreach ($datosReporte as $row): 
                        $showCategoria = $row['categoria_nombre'] != $currentCategoria;
                        $showExamen = $row['examen_nombre'] != $currentExamen;
                        $currentCategoria = $row['categoria_nombre'];
                        $currentExamen = $row['examen_nombre'];
                    ?>
                    <?php if ($showCategoria): ?>
                    <tr class="table-secondary">
                        <td colspan="12"><strong><?= htmlspecialchars($row['categoria_nombre']) ?></strong></td>
                    </tr>
                    <?php endif; ?>
                    <tr>
                        <td>
                            <?php if ($showExamen): ?>
                            <strong><?= htmlspecialchars($row['examen_nombre']) ?></strong><br>
                            <?php endif; ?>
                            <span class="ms-3">→ <?= htmlspecialchars($row['parametro_nombre']) ?></span>
                            <small class="text-muted">(<?= htmlspecialchars($row['unidad'] ?? '') ?>)</small>
                        </td>
                        <td><small><?= htmlspecialchars($row['lote_codigo']) ?></small></td>
                        <td>
                            <span class="badge bg-<?= $row['nivel'] == 'Normal' ? 'success' : ($row['nivel'] == 'Alto' ? 'warning' : 'info') ?>">
                                <?= $row['nivel'] ?>
                            </span>
                        </td>
                        <td class="text-end"><?= number_format($row['valor_asignado'], 2) ?></td>
                        <td class="text-end"><?= number_format($row['desviacion_estandar'], 3) ?></td>
                        <td class="text-center"><strong><?= $row['n_controles'] ?></strong></td>
                        <td class="text-center text-success"><?= $row['n_aceptados'] ?></td>
                        <td class="text-center text-warning"><?= $row['n_alertas'] ?></td>
                        <td class="text-center text-danger"><?= $row['n_rechazados'] ?></td>
                        <td class="text-end">
                            <?php if (isset($row['cv'])): ?>
                            <span class="<?= $row['cv'] > 10 ? 'text-danger' : ($row['cv'] > 5 ? 'text-warning' : '') ?>">
                                <?= number_format($row['cv'], 2) ?>%
                            </span>
                            <?php else: ?>-<?php endif; ?>
                        </td>
                        <td class="text-end">
                            <?php if (isset($row['sesgo_pct'])): ?>
                            <span class="<?= abs($row['sesgo_pct']) > 10 ? 'text-danger' : (abs($row['sesgo_pct']) > 5 ? 'text-warning' : '') ?>">
                                <?= number_format($row['sesgo_pct'], 2) ?>%
                            </span>
                            <?php else: ?>-<?php endif; ?>
                        </td>
                        <td class="text-center">
                            <span class="badge bg-<?= $row['pct_aceptacion'] >= 90 ? 'success' : ($row['pct_aceptacion'] >= 80 ? 'warning' : 'danger') ?>">
                                <?= number_format($row['pct_aceptacion'], 1) ?>%
                            </span>
                        </td>
                    </tr>
                    <?php endforeach; ?>
                </tbody>
            </table>
        </div>
        
        <!-- Leyenda -->
        <div class="mt-4 p-3 bg-light rounded d-print-block">
            <h6>Leyenda:</h6>
            <small>
                <strong>N:</strong> Número de controles | 
                <strong>✓:</strong> Aceptados | 
                <strong>!:</strong> Alertas (Regla 1-2s) | 
                <strong>✗:</strong> Rechazados |
                <strong>CV%:</strong> Coeficiente de variación | 
                <strong>Sesgo%:</strong> Desviación de la media asignada
            </small>
            <hr>
            <small class="text-muted">
                <strong>Criterios de evaluación:</strong> 
                CV% aceptable: <5% (óptimo), <10% (aceptable), >10% (revisar). 
                Sesgo aceptable: <5% (óptimo), <10% (aceptable), >10% (revisar).
            </small>
        </div>
        
        <!-- Firmas -->
        <div class="row mt-5 d-print-block">
            <div class="col-6 text-center">
                <div style="border-top: 1px solid #000; width: 200px; margin: 0 auto; padding-top: 5px;">
                    <strong>Analista Responsable</strong>
                </div>
            </div>
            <div class="col-6 text-center">
                <div style="border-top: 1px solid #000; width: 200px; margin: 0 auto; padding-top: 5px;">
                    <strong>Regente del Laboratorio</strong><br>
                    <small>Firma y Sello</small>
                </div>
            </div>
        </div>
    </div>
</div>

<?php elseif ($accion == 'generar'): ?>
<div class="alert alert-info">
    <i class="bi bi-info-circle me-2"></i>
    No se encontraron datos para los filtros seleccionados.
</div>
<?php endif; ?>

<script>
document.getElementById('categoria_id').addEventListener('change', function() {
    const categoriaId = this.value;
    const examenSelect = document.getElementById('examen_id');
    
    examenSelect.innerHTML = '<option value="">-- Todos --</option>';
    
    if (categoriaId) {
        fetch('get_examenes.php?categoria_id=' + categoriaId)
            .then(response => response.json())
            .then(data => {
                data.forEach(examen => {
                    const option = document.createElement('option');
                    option.value = examen.id;
                    option.textContent = examen.nombre;
                    examenSelect.appendChild(option);
                });
            });
    }
});

function exportarExcel() {
    const table = document.getElementById('tablaReporte');
    let csv = 'Categoría,Examen,Parámetro,Unidad,Lote,Nivel,Media Asignada,DE Asignada,N,Aceptados,Alertas,Rechazados,CV%,Sesgo%,% Aceptación\n';
    
    const rows = table.querySelectorAll('tbody tr');
    let currentCategoria = '', currentExamen = '';
    
    rows.forEach(row => {
        const cells = row.querySelectorAll('td');
        if (cells.length === 1) {
            // Fila de categoría
            currentCategoria = cells[0].textContent.trim();
        } else if (cells.length >= 10) {
            // Fila de datos
            const parametro = cells[0].textContent.trim().replace('→', '').trim();
            if (cells[0].querySelector('strong')) {
                currentExamen = cells[0].querySelector('strong').textContent.trim();
            }
            
            csv += `"${currentCategoria}","${currentExamen}","${parametro.split('(')[0].trim()}","${parametro.match(/\((.*?)\)/)?.[1] || ''}",`;
            csv += `"${cells[1].textContent.trim()}","${cells[2].textContent.trim()}",`;
            csv += `"${cells[3].textContent.trim()}","${cells[4].textContent.trim()}",`;
            csv += `"${cells[5].textContent.trim()}","${cells[6].textContent.trim()}",`;
            csv += `"${cells[7].textContent.trim()}","${cells[8].textContent.trim()}",`;
            csv += `"${cells[9].textContent.trim()}","${cells[10].textContent.trim()}",`;
            csv += `"${cells[11].textContent.trim()}"\n`;
        }
    });
    
    const blob = new Blob(['\ufeff' + csv], { type: 'text/csv;charset=utf-8;' });
    const url = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = 'reporte_qc_<?= date('Y-m-d') ?>.csv';
    a.click();
}

function exportarPDF() {
    window.print();
}
</script>

<style media="print">
@page {
    size: landscape;
    margin: 1cm;
}
body {
    font-size: 10pt;
}
.d-print-none {
    display: none !important;
}
.d-print-block {
    display: block !important;
}
.card {
    border: none;
    box-shadow: none;
}
.table {
    font-size: 9pt;
}
.badge {
    border: 1px solid #000;
    color: #000 !important;
    background: #fff !important;
}
</style>

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