<?php
/**
 * GET /api/check_version.php?turno_id=1
 *
 * Devuelve el hash de versión sin descargar todos los datos.
 * El cliente lo usa para detectar si alguien más cambió algo mientras editaba.
 *
 * Response:
 *   {
 *     "version": "abc123def456...",
 *     "guardado_por": "brisa",
 *     "guardado_en": "2026-08-25 14:30:45"
 *   }
 */

require __DIR__ . '/_bootstrap.php';

requireAuth();

$turnoId = getTurnoId();
$pdo = getPDO();

// Cargar todos los datos (igual que en load.php) pero solo para calcular hash
$dataBruto = [];

// 1. Docentes
$stmt = $pdo->prepare('SELECT id, nombre, email, especialidad FROM docentes WHERE turno_id = ?');
$stmt->execute([$turnoId]);
$docentes = $stmt->fetchAll();
$dataBruto['Docentes'] = array_map(function($d) {
    return [
        'id' => (string)$d['id'],
        'nombre' => $d['nombre'],
        'email' => $d['email'],
        'especialidad' => $d['especialidad'] ? json_decode($d['especialidad'], true) : [],
    ];
}, $docentes);

// 2. Grupos
$stmt = $pdo->prepare('SELECT id, nombre, grado, seccion FROM grupos WHERE turno_id = ?');
$stmt->execute([$turnoId]);
$grupos = $stmt->fetchAll();
$dataBruto['Grupos'] = array_map(function($g) {
    return [
        'id' => (string)$g['id'],
        'nombre' => $g['nombre'],
        'grado' => $g['grado'],
        'seccion' => $g['seccion'],
    ];
}, $grupos);

// 3. Asignaturas
$stmt = $pdo->prepare('SELECT id, nombre, campo FROM asignaturas WHERE turno_id = ?');
$stmt->execute([$turnoId]);
$asignaturas = $stmt->fetchAll();
$dataBruto['Asignaturas'] = array_map(function($a) {
    return [
        'id' => (string)$a['id'],
        'nombre' => $a['nombre'],
        'campo' => $a['campo'],
    ];
}, $asignaturas);

// 4. Plan Sintético
$stmt = $pdo->prepare('SELECT id, campo, asignatura, grado, contenido, tema, pda FROM plan_sintetico WHERE turno_id = ?');
$stmt->execute([$turnoId]);
$planSintetico = $stmt->fetchAll();
$dataBruto['PlanSintetico'] = array_map(function($p) {
    return [
        'id' => (string)$p['id'],
        'campo' => $p['campo'],
        'asignatura' => $p['asignatura'],
        'grado' => $p['grado'],
        'contenido' => $p['contenido'],
        'tema' => $p['tema'],
        'pda' => $p['pda'],
    ];
}, $planSintetico);

// 5. Programa Analítico
$stmt = $pdo->prepare('
    SELECT id, asignatura, grado, contenido, periodo, docente, campo, problematica, temas,
           contexto, ejes, pmce_vinculo, pat_dimension, accion_mejoras,
           eval_diagnostica, eval_formativa, eval_autoeval, eval_coeval, eval_heteroeval,
           instrumentos, evidencias_eval, criterios,
           fecha_inicio, fecha_fin, fecha_real, avance, prioridad, seguimiento_avances
    FROM programa_analitico WHERE turno_id = ?
');
$stmt->execute([$turnoId]);
$progAnalitico = $stmt->fetchAll();
$dataBruto['ProgAnalitico'] = array_map(function($p) {
    return [
        'id' => (string)$p['id'],
        'asignatura' => $p['asignatura'],
        'grado' => $p['grado'],
        'contenido' => $p['contenido'],
        'periodo' => $p['periodo'],
        'docente' => $p['docente'],
        'campo' => $p['campo'],
        'problematica' => $p['problematica'],
        'temas' => $p['temas'],
        'contexto' => $p['contexto'],
        'ejes' => $p['ejes'],
        'pmce_vinculo' => $p['pmce_vinculo'],
        'pat_dimension' => $p['pat_dimension'],
        'accion_mejoras' => $p['accion_mejoras'],
        'eval_diagnostica' => (bool)$p['eval_diagnostica'],
        'eval_formativa' => (bool)$p['eval_formativa'],
        'eval_autoeval' => (bool)$p['eval_autoeval'],
        'eval_coeval' => (bool)$p['eval_coeval'],
        'eval_heteroeval' => (bool)$p['eval_heteroeval'],
        'instrumentos' => $p['instrumentos'],
        'evidencias_eval' => $p['evidencias_eval'],
        'criterios' => $p['criterios'],
        'fecha_inicio' => $p['fecha_inicio'],
        'fecha_fin' => $p['fecha_fin'],
        'fecha_real' => $p['fecha_real'],
        'avance' => (int)$p['avance'],
        'prioridad' => $p['prioridad'],
        'seguimiento_avances' => $p['seguimiento_avances'],
    ];
}, $progAnalitico);

// 6. Proyectos
$stmt = $pdo->prepare('SELECT id, nombre, periodo, problematica, metodologia, fechas, justificacion, objetivo, docentes, avance, avance_observaciones FROM proyectos WHERE turno_id = ?');
$stmt->execute([$turnoId]);
$proyectos = $stmt->fetchAll();
$dataBruto['Proyectos'] = array_map(function($p) {
    return [
        'id' => (string)$p['id'],
        'nombre' => $p['nombre'],
        'periodo' => $p['periodo'],
        'problematica' => $p['problematica'],
        'metodologia' => $p['metodologia'],
        'fechas' => $p['fechas'],
        'justificacion' => $p['justificacion'],
        'objetivo' => $p['objetivo'],
        'docentes' => $p['docentes'],
        'avance' => (int)$p['avance'],
        'avance_observaciones' => $p['avance_observaciones'],
    ];
}, $proyectos);

// 7. PMCE
$stmt = $pdo->prepare('SELECT id, ambito, diagnostico, objetivo, meta, cumplimiento FROM pmce WHERE turno_id = ?');
$stmt->execute([$turnoId]);
$pmce = $stmt->fetchAll();
$dataBruto['PMCE'] = array_map(function($p) {
    return [
        'id' => (string)$p['id'],
        'ambito' => $p['ambito'],
        'diagnostico' => $p['diagnostico'],
        'objetivo' => $p['objetivo'],
        'meta' => $p['meta'],
        'cumplimiento' => (int)$p['cumplimiento'],
    ];
}, $pmce);

// 8. PAT
$stmt = $pdo->prepare('SELECT id, pmce_id, actividad, fecha_inicio, fecha_fin, responsable, recursos, avance FROM pat WHERE turno_id = ?');
$stmt->execute([$turnoId]);
$pat = $stmt->fetchAll();
$dataBruto['PAT'] = array_map(function($p) {
    return [
        'id' => (string)$p['id'],
        'pmce_id' => $p['pmce_id'] !== null ? (string)$p['pmce_id'] : '',
        'actividad' => $p['actividad'],
        'fecha_inicio' => $p['fecha_inicio'],
        'fecha_fin' => $p['fecha_fin'],
        'responsable' => $p['responsable'],
        'recursos' => $p['recursos'],
        'avance' => (int)$p['avance'],
    ];
}, $pat);

// 9. Datos Escuela
$stmt = $pdo->prepare('SELECT * FROM datos_escuela WHERE turno_id = ?');
$stmt->execute([$turnoId]);
$datosEscuela = $stmt->fetchAll();
$dataBruto['DatosEscuela'] = array_map(function($d) {
    unset($d['id']);
    return $d;
}, $datosEscuela);

// 10. Problematicas
$stmt = $pdo->prepare('SELECT id, nombre, descripcion FROM problematicas WHERE turno_id = ?');
$stmt->execute([$turnoId]);
$problematicas = $stmt->fetchAll();
$dataBruto['Problematicas'] = array_map(function($p) {
    return [
        'id' => $p['id'],
        'nombre' => $p['nombre'],
        'descripcion' => $p['descripcion'],
    ];
}, $problematicas);

// 11. Eventos
$stmt = $pdo->prepare('SELECT id, nombre, tipo, fecha_inicio, fecha_fin, avance, responsable, notas FROM eventos WHERE turno_id = ?');
$stmt->execute([$turnoId]);
$eventos = $stmt->fetchAll();
$dataBruto['Eventos'] = array_map(function($e) {
    return [
        'id' => $e['id'],
        'nombre' => $e['nombre'],
        'tipo' => $e['tipo'],
        'fecha_inicio' => $e['fecha_inicio'],
        'fecha_fin' => $e['fecha_fin'],
        'avance' => (int)$e['avance'],
        'responsable' => $e['responsable'],
        'notas' => $e['notas'],
    ];
}, $eventos);

// 12. Evidencias (vacío)
$dataBruto['EvidenciasIndexed'] = [];

// Calcular hash
$version = calcularVersionHash($dataBruto);

// Obtener última actualización
$stmt = $pdo->prepare('
    SELECT usuario, timestamp FROM versiones
    WHERE turno_id = ?
    ORDER BY timestamp DESC
    LIMIT 1
');
$stmt->execute([$turnoId]);
$ultimaVersion = $stmt->fetch();

exitJSON([
    'version' => $version,
    'guardado_por' => $ultimaVersion['usuario'] ?? null,
    'guardado_en' => $ultimaVersion['timestamp'] ?? null,
]);
