<?php
// ============================================================
// dashboard_cache.php
// Gerador e servidor de cache para o dashboard
// Usa caminhos relativos — funciona em qualquer hospedagem
// ============================================================

// Verificar se foi chamado como include
if (!isset($db)) {
    require_once __DIR__ . '/../5_config/config.php';
    $db = getDB();
}

// Caminho do arquivo de cache (relativo, portável)
$cache_dir = __DIR__ . '/../4_storage/uploads/cache/';
$cache_file = $cache_dir . 'dashboard.json';
$cache_ttl = 300; // 5 minutos em segundos

// Criar diretório de cache se não existir
if (!is_dir($cache_dir)) {
    @mkdir($cache_dir, 0777, true);
}

// ============================================================
// VERIFICAR SE CACHE É VÁLIDO
// ============================================================
if (file_exists($cache_file)) {
    $file_age = time() - filemtime($cache_file);
    if ($file_age < $cache_ttl) {
        // Cache ainda é válido, retornar dados do arquivo
        $cache_data = json_decode(file_get_contents($cache_file), true);
        if (is_array($cache_data)) {
            return $cache_data;
        }
    }
}

// ============================================================
// CACHE NÃO EXISTE OU EXPIROU — EXECUTAR QUERIES
// ============================================================

// 1. Total de unidades ativas
$total_unidades = (int) $db->query("SELECT COUNT(*) FROM unidades WHERE ativo = 1")->fetchColumn();

// 2. Equipamentos NR 12
$stmt_eq = $db->query("
    SELECT id, nome, tag, cod,
           (proj_conceito + execucao + procedimento + validacao + laudos) AS checklist_ok
    FROM equipamentos
    ORDER BY (proj_conceito + execucao + procedimento + validacao + laudos) DESC
");
$equipamentos_todos = $stmt_eq->fetchAll();
$total_equipamentos = count($equipamentos_todos);
$equipamentos_ok = 0;
foreach ($equipamentos_todos as $eq) {
    if ((int)$eq['checklist_ok'] >= 5) $equipamentos_ok++;
}
$pct_eq = $total_equipamentos > 0 ? round($equipamentos_ok / $total_equipamentos * 100) : 0;

// 3. Ações por norma (KPIs)
$stmt_acoes = $db->query("
    SELECT norma,
           COUNT(*) AS total,
           SUM(status = 'concluida') AS concluidas,
           SUM(status IN ('pendente','em_andamento')) AS pendentes,
           SUM(status = 'atrasada') AS atrasadas
    FROM acoes
    GROUP BY norma
");
$kpis_norma = [
    'NR10' => ['total' => 0, 'concluidas' => 0, 'pendentes' => 0, 'atrasadas' => 0, 'pct' => 0],
    'NR12' => ['total' => 0, 'concluidas' => 0, 'pendentes' => 0, 'atrasadas' => 0, 'pct' => 0],
    'SPDA' => ['total' => 0, 'concluidas' => 0, 'pendentes' => 0, 'atrasadas' => 0, 'pct' => 0]
];
foreach ($stmt_acoes->fetchAll() as $row) {
    $n = $row['norma'];
    if (!isset($kpis_norma[$n])) continue;
    $kpis_norma[$n]['total'] = (int)$row['total'];
    $kpis_norma[$n]['concluidas'] = (int)$row['concluidas'];
    $kpis_norma[$n]['pendentes'] = (int)$row['pendentes'];
    $kpis_norma[$n]['atrasadas'] = (int)$row['atrasadas'];
    $kpis_norma[$n]['pct'] = $row['total'] > 0 ? round($row['concluidas'] / $row['total'] * 100) : 0;
}

$total_concluidas = $kpis_norma['NR10']['concluidas'] + $kpis_norma['NR12']['concluidas'] + $kpis_norma['SPDA']['concluidas'];
$total_pendentes = $kpis_norma['NR10']['pendentes'] + $kpis_norma['NR12']['pendentes'] + $kpis_norma['SPDA']['pendentes'];
$total_atrasadas = $kpis_norma['NR10']['atrasadas'] + $kpis_norma['NR12']['atrasadas'] + $kpis_norma['SPDA']['atrasadas'];

// 4. Ações recentes
$acoes_recentes = $db->query("
    SELECT a.titulo, a.norma, a.status, a.data_vencimento,
           u.codigo AS unidade_codigo
    FROM acoes a
    LEFT JOIN unidades u ON u.id = a.unidade_id
    ORDER BY a.atualizado_em DESC
    LIMIT 10
")->fetchAll();

// 5. Não conformidades
$nc_abertas = (int) $db->query("SELECT COUNT(*) FROM nao_conformidades WHERE status = 'aberta'")->fetchColumn();
$nc_em_tratamento = (int) $db->query("SELECT COUNT(*) FROM nao_conformidades WHERE status = 'em_tratamento'")->fetchColumn();
$nc_total = (int) $db->query("SELECT COUNT(*) FROM nao_conformidades")->fetchColumn();

// 6. Top 5 equipamentos
$equipamentos_top = array_slice($equipamentos_todos, 0, 5);

// ============================================================
// MONTAR ARRAY COM DADOS
// ============================================================
$cache_data = [
    'total_unidades' => $total_unidades,
    'total_equipamentos' => $total_equipamentos,
    'equipamentos_ok' => $equipamentos_ok,
    'pct_eq' => $pct_eq,
    'equipamentos_top' => $equipamentos_top,
    'kpis_norma' => $kpis_norma,
    'total_concluidas' => $total_concluidas,
    'total_pendentes' => $total_pendentes,
    'total_atrasadas' => $total_atrasadas,
    'acoes_recentes' => $acoes_recentes,
    'nc_abertas' => $nc_abertas,
    'nc_em_tratamento' => $nc_em_tratamento,
    'nc_total' => $nc_total,
    'cache_gerado_em' => date('Y-m-d H:i:s')
];

// ============================================================
// SALVAR EM ARQUIVO JSON
// ============================================================
$json_content = json_encode($cache_data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
@file_put_contents($cache_file, $json_content);

// ============================================================
// RETORNAR DADOS
// ============================================================
return $cache_data;
?>
