<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type");
header("Content-Type: application/json; charset=utf-8");
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(204); exit; }

date_default_timezone_set("Europe/Madrid");

$documentRoot = realpath(__DIR__ . '/../..');
$logFile = $documentRoot . "/php/api/log_rhb.json";

if (!file_exists($logFile)) {
    echo json_encode(['error' => 'Sin datos']);
    exit;
}

$logs = json_decode(file_get_contents($logFile), true);
if (!is_array($logs)) { echo json_encode(['error' => 'Datos inválidos']); exit; }

$autor  = isset($_GET['autor']) ? trim($_GET['autor']) : '';
$esAdmin = ($autor === 'jmab' || $autor === '');

// Fecha límite: hace 7 días a las 00:00
$hoy     = new DateTime('today');
$hace7   = (new DateTime('today'))->modify('-6 days');

// Función para parsear "DD/MM/YYYY, HH:MM:SS am/pm"
function parsearTimestamp($ts) {
    if (!$ts) return null;
    $partes = explode(', ', $ts);
    if (count($partes) < 2) return null;
    list($d, $m, $y) = explode('/', $partes[0]);
    // strtotime acepta "YYYY-MM-DD"
    return DateTime::createFromFormat('d/m/Y', "$d/$m/$y") ?: null;
}

// ── Filtrar por autor si no es admin ─────────────────────────────────────────
$logsFiltered = $esAdmin ? $logs : array_values(array_filter($logs, function($l) use ($autor) {
    return isset($l['autor']) && $l['autor'] === $autor;
}));

// ── Calcular stats ────────────────────────────────────────────────────────────
$sesiones7   = 0;
$minutos7    = 0;
$pdfsActivos = [];   // pdf_nom → true  (activos en últimos 7 días)
$pdfsTodos   = [];   // pdf_nom → última fecha (DateTime)
$porAutor    = [];   // autor  → [sesiones, minutos, pdfs]

foreach ($logsFiltered as $log) {
    $fecha = parsearTimestamp($log['timestamp'] ?? '');
    if (!$fecha) continue;
    $pdf    = $log['pdf_nom']  ?? '';
    $min    = max(0, intval($log['diferenciaMinutos'] ?? 0));
    $logAutor = $log['autor'] ?? 'desconocido';

    // Actualizar última fecha del pdf
    if (!isset($pdfsTodos[$pdf]) || $fecha > $pdfsTodos[$pdf]) {
        $pdfsTodos[$pdf] = $fecha;
    }

    if ($fecha >= $hace7) {
        $sesiones7++;
        $minutos7 += $min;
        $pdfsActivos[$pdf] = true;

        // Desglose por autor (solo para admin)
        if ($esAdmin) {
            if (!isset($porAutor[$logAutor])) $porAutor[$logAutor] = ['sesiones' => 0, 'minutos' => 0, 'pdfs' => []];
            $porAutor[$logAutor]['sesiones']++;
            $porAutor[$logAutor]['minutos'] += $min;
            $porAutor[$logAutor]['pdfs'][$pdf] = true;
        }
    }
}

// PDFs inactivos: tienen historial pero sin actividad en los últimos 7 días
$pdfsInactivos = [];
foreach ($pdfsTodos as $pdf => $ultimaFecha) {
    if (!isset($pdfsActivos[$pdf])) {
        $diasSinActividad = $hoy->diff($ultimaFecha)->days;
        $pdfsInactivos[] = ['pdf' => $pdf, 'dias' => $diasSinActividad];
    }
}
// Ordenar por días sin actividad (más reciente primero)
usort($pdfsInactivos, fn($a, $b) => $a['dias'] - $b['dias']);

// Top PDF activo (más sesiones esta semana)
$contPdfs = [];
foreach ($logsFiltered as $log) {
    $fecha = parsearTimestamp($log['timestamp'] ?? '');
    if (!$fecha || $fecha < $hace7) continue;
    $pdf = $log['pdf_nom'] ?? '';
    $contPdfs[$pdf] = ($contPdfs[$pdf] ?? 0) + 1;
}
arsort($contPdfs);
$topPdf = array_key_first($contPdfs) ?? '';

// Desglose por autor: convertir pdfs a count
if ($esAdmin) {
    foreach ($porAutor as $a => &$d) {
        $d['pdfs'] = count($d['pdfs']);
    }
    unset($d);
    // Ordenar por sesiones desc
    uasort($porAutor, fn($a, $b) => $b['sesiones'] - $a['sesiones']);
}

echo json_encode([
    'sesiones_semana'  => $sesiones7,
    'minutos_semana'   => $minutos7,
    'pdfs_activos'     => count($pdfsActivos),
    'pdfs_inactivos'   => array_slice($pdfsInactivos, 0, 5),
    'top_pdf'          => $topPdf,
    'total_pdfs'       => count($pdfsTodos),
    'por_autor'        => $esAdmin ? $porAutor : null,
]);
