<?php
/**
 * Dashboard principal — visión global de flota e instrumentos.
 * Path: public/index.php  (REEMPLAZO COMPLETO — integración Bloque 3b)
 *
 * Cambios respecto de la versión anterior:
 *   - Los KPIs cuentan AMBOS instrumentos (C2M2 + corridas de checklist).
 *   - Segunda fila de KPIs de flota: evaluaciones pendientes (regla computada),
 *     revisiones de tier, plantas sin tier, borradores de checklist.
 *   - "Evaluaciones recientes" unifica ambos instrumentos con badge de tier
 *     y resultado de corrida.
 * Estructura y clases visuales originales (.stat, .grid, .data) sin cambios.
 */
require_once __DIR__ . '/../includes/bootstrap.php';
require_once __DIR__ . '/../includes/Tier.php';
require_once __DIR__ . '/../includes/Checklist.php';
Auth::require();

$pdo = Database::getConnection();

// ---- KPIs de instrumentos (C2M2 + checklists) -------------------------------
$aTotal     = (int)$pdo->query('SELECT COUNT(*) FROM assessments WHERE deleted_at IS NULL')->fetchColumn();
$aCompleted = (int)$pdo->query("SELECT COUNT(*) FROM assessments WHERE status = 'completed' AND deleted_at IS NULL")->fetchColumn();
$aOpen      = (int)$pdo->query("SELECT COUNT(*) FROM assessments WHERE status IN ('draft','in_progress') AND deleted_at IS NULL")->fetchColumn();
$rTotal     = (int)$pdo->query('SELECT COUNT(*) FROM checklist_runs WHERE deleted_at IS NULL')->fetchColumn();
$rCompleted = (int)$pdo->query("SELECT COUNT(*) FROM checklist_runs WHERE status = 'completed' AND deleted_at IS NULL")->fetchColumn();
$rOpen      = (int)$pdo->query("SELECT COUNT(*) FROM checklist_runs WHERE status = 'draft' AND deleted_at IS NULL")->fetchColumn();

$stats = [
    'plants'      => (int)$pdo->query('SELECT COUNT(*) FROM plants WHERE is_active = 1')->fetchColumn(),
    'assessments' => $aTotal + $rTotal,
    'completed'   => $aCompleted + $rCompleted,
    'in_progress' => $aOpen + $rOpen,
];

// ---- Estado de flota (tiering) ----------------------------------------------
$tiers = ['1' => 0, '2' => 0, '3' => 0, 'none' => 0];
foreach ($pdo->query(
    "SELECT COALESCE(CAST(current_tier AS CHAR), 'none') AS t, COUNT(*) AS c
     FROM plants WHERE is_active = 1 GROUP BY t"
)->fetchAll() as $row) {
    $tiers[$row['t']] = (int)$row['c'];
}
$pendingMap  = Tier::evaluationPendingMap();
$evalPending = count(array_filter($pendingMap, static fn(array $v): bool => $v['pending']));
$tierReviews = count(Tier::pendingReviews());

// ---- Evaluaciones recientes (ambos instrumentos, mezcladas) ------------------
$recent = [];
foreach ($pdo->query(
    "SELECT a.id, a.title, a.status, a.assessment_date AS d, a.updated_at AS ts,
            p.code AS plant_code, p.name AS plant_name,
            1 AS tier_class, 'c2m2' AS kind, NULL AS result
     FROM assessments a JOIN plants p ON p.id = a.plant_id
     WHERE a.deleted_at IS NULL
     ORDER BY a.updated_at DESC LIMIT 10"
)->fetchAll() as $r) { $recent[] = $r; }
foreach ($pdo->query(
    "SELECT r.id, t.name AS title, r.status, COALESCE(r.completed_at, r.started_at) AS d,
            COALESCE(r.completed_at, r.started_at) AS ts,
            p.code AS plant_code, p.name AS plant_name,
            t.tier AS tier_class, 'run' AS kind, r.result
     FROM checklist_runs r
     JOIN plants p ON p.id = r.plant_id
     JOIN checklist_templates t ON t.id = r.template_id
     WHERE r.deleted_at IS NULL
     ORDER BY ts DESC LIMIT 10"
)->fetchAll() as $r) { $recent[] = $r; }
usort($recent, static fn(array $x, array $y): int => strtotime($y['ts']) <=> strtotime($x['ts']));
$recent = array_slice($recent, 0, 10);

$statusLabels = [
    'draft'       => ['Borrador', 'badge-none'],
    'in_progress' => ['En curso', 'badge-pi'],
    'completed'   => ['Completada', 'badge-fi'],
    'archived'    => ['Archivada', 'badge-na'],
];

$pageTitle = 'Dashboard';
$crumbs = [['label' => 'Dashboard']];
include __DIR__ . '/../views/_header.php';
?>
<div class="page-header">
    <div>
        <h1>Dashboard</h1>
        <div class="subtitle">Visión global del programa de ciberseguridad OT de la flota</div>
    </div>
    <?php if (Auth::hasRole('admin') || Auth::hasRole('evaluator')): ?>
    <a href="/assessment/new.php" class="btn btn-accent">+ Nueva evaluación</a>
    <?php endif; ?>
</div>

<div class="grid grid-4 mb-4">
    <div class="stat">
        <div class="stat-label">Plantas activas</div>
        <div class="stat-value"><?= $stats['plants'] ?></div>
        <div class="stat-hint">
            <span class="tier-badge tier-1">T1 <?= $tiers['1'] ?></span>
            <span class="tier-badge tier-2">T2 <?= $tiers['2'] ?></span>
            <span class="tier-badge tier-3">T3 <?= $tiers['3'] ?></span>
            <span class="tier-badge tier-nt" title="Sin clasificar (fuera del régimen de tiering)">NT <?= $tiers['none'] ?></span>
        </div>
    </div>
    <div class="stat">
        <div class="stat-label">Evaluaciones</div>
        <div class="stat-value"><?= $stats['assessments'] ?></div>
        <div class="stat-hint">C2M2: <?= $aTotal ?> · Checklists: <?= $rTotal ?></div>
    </div>
    <div class="stat">
        <div class="stat-label">Completadas</div>
        <div class="stat-value"><?= $stats['completed'] ?></div>
        <div class="stat-hint">Con resultados finales</div>
    </div>
    <div class="stat">
        <div class="stat-label">En curso</div>
        <div class="stat-value"><?= $stats['in_progress'] ?></div>
        <div class="stat-hint">Borradores + activas</div>
    </div>
</div>

<div class="grid grid-4 mb-4">
    <div class="stat <?= $evalPending > 0 ? 'stat-alert' : '' ?>">
        <div class="stat-label">Evaluaciones pendientes</div>
        <div class="stat-value"><?= $evalPending ?></div>
        <div class="stat-hint">Sin instrumento del tier vigente ejecutado</div>
    </div>
    <div class="stat <?= $tierReviews > 0 ? 'stat-alert' : '' ?>">
        <div class="stat-label">Revisiones de tier</div>
        <div class="stat-value"><?= $tierReviews ?></div>
        <div class="stat-hint">Solicitadas o vencidas</div>
    </div>
    <div class="stat <?= $tiers['none'] > 0 ? 'stat-alert' : '' ?>">
        <div class="stat-label">Plantas sin tier</div>
        <div class="stat-value"><?= $tiers['none'] ?></div>
        <div class="stat-hint">Fuera del régimen — no evaluables</div>
    </div>
    <div class="stat">
        <div class="stat-label">Checklists en borrador</div>
        <div class="stat-value"><?= $rOpen ?></div>
        <div class="stat-hint">Corridas sin completar</div>
    </div>
</div>

<div class="card">
    <div class="card-header">
        <h3>Evaluaciones recientes</h3>
        <a href="/assessments.php" class="text-sm">Ver todas →</a>
    </div>
    <?php if (empty($recent)): ?>
        <div class="card-body text-center text-muted">
            <p>Aún no hay evaluaciones cargadas.</p>
            <?php if (Auth::hasRole('admin') || Auth::hasRole('evaluator')): ?>
                <a href="/assessment/new.php" class="btn btn-accent mt-4">Crear primera evaluación</a>
            <?php endif; ?>
        </div>
    <?php else: ?>
    <table class="data">
        <thead>
            <tr>
                <th>Planta</th>
                <th>Instrumento</th>
                <th>Evaluación</th>
                <th>Fecha</th>
                <th>Estado / Resultado</th>
                <th class="text-right">Acciones</th>
            </tr>
        </thead>
        <tbody>
        <?php foreach ($recent as $a): ?>
            <tr>
                <td>
                    <div><strong><?= e($a['plant_code']) ?></strong></div>
                    <div class="text-sm text-muted"><?= e($a['plant_name']) ?></div>
                </td>
                <td><span class="tier-badge tier-<?= (int)$a['tier_class'] ?>">T<?= (int)$a['tier_class'] ?></span></td>
                <td><?= e($a['title']) ?></td>
                <td><?= e(date('d/m/Y', strtotime($a['d']))) ?></td>
                <td>
                    <?php if ($a['kind'] === 'run' && $a['result'] !== null): ?>
                        <span class="chk-result chk-result-<?= e($a['result']) ?>"><?= e(Checklist::RESULTS[$a['result']] ?? $a['result']) ?></span>
                    <?php else: ?>
                        <?php [$lbl, $cls] = $statusLabels[$a['status']] ?? [$a['status'], 'badge-none']; ?>
                        <span class="badge <?= $cls ?>"><?= e($lbl) ?></span>
                    <?php endif; ?>
                </td>
                <td class="text-right">
                    <?php $openUrl = $a['kind'] === 'run'
                        ? '/checklist_run.php?id=' . (int)$a['id'] . '&from=dashboard'
                        : '/assessment/edit.php?id=' . (int)$a['id']; ?>
                    <a href="<?= e($openUrl) ?>" class="btn btn-sm btn-outline">Abrir</a>
                </td>
            </tr>
        <?php endforeach; ?>
        </tbody>
    </table>
    <?php endif; ?>
</div>

<?php include __DIR__ . '/../views/_footer.php'; ?>
