<?php
declare(strict_types=1);

require_once __DIR__ . '/../auth/guard.php';
require_once __DIR__ . '/../conexion.php';
require_once __DIR__ . '/../_helpers.php';

$u = require_login();
require_module_write($u, "instrumentos");
$in = read_json_body();

$cod = trim((string)($in['codigo_familia'] ?? ''));
$eventos = $in['eventos'] ?? [];

if ($cod === '') json_response(['ok'=>false,'message'=>'Código familia requerido'], 400);
if (!is_array($eventos)) $eventos = [];

try {
  $pdo->beginTransaction();

  // crea nueva versión
  $st = $pdo->prepare("INSERT INTO instrumentos_linea (codigo_familia, registrado_por) VALUES (:cod, :reg)");
  $st->execute([':cod'=>$cod, ':reg'=>($u['rut'] ?? null)]);
  $lineaId = (int)$pdo->lastInsertId();

  $ins = $pdo->prepare("
    INSERT INTO instrumentos_linea_eventos (linea_id, fecha, rut, categoria, descripcion)
    VALUES (:lid, NULLIF(:fecha,''), NULLIF(:rut,''), NULLIF(:cat,''), NULLIF(:des,''))
  ");

  $count = 0;
  foreach ($eventos as $ev) {
    if (!is_array($ev)) continue;
    $fecha = trim((string)($ev['fecha'] ?? ''));
    $rut   = normalize_rut((string)($ev['rut'] ?? ''));
    $cat   = trim((string)($ev['categoria'] ?? ''));
    $des   = trim((string)($ev['descripcion'] ?? ''));

    // ignora filas completamente vacías
    if ($fecha === '' && $rut === '' && $cat === '' && $des === '') continue;

    $ins->execute([
      ':lid'=>$lineaId,
      ':fecha'=>$fecha,
      ':rut'=>$rut,
      ':cat'=>$cat,
      ':des'=>$des,
    ]);
    $count++;
  }

  $stH = $pdo->prepare("
    INSERT INTO instrumentos_historial
      (codigo_familia, instrumento, ref_id, fecha, puntaje, resultado, registrado_por)
    VALUES
      (:cod, 'LINEA_TIEMPO', :ref, CURDATE(), NULL, :res, :reg)
  ");
  $stH->execute([
    ':cod'=>$cod,
    ':ref'=>$lineaId,
    ':res'=>"Eventos: {$count}",
    ':reg'=>($u['rut'] ?? null),
  ]);

  $pdo->commit();
  fp_log_activity($pdo, $u, 'Instrumentos', 'Guardar línea de tiempo', 'Se registró línea de tiempo para familia ' . $cod . ' con ' . $count . ' eventos.', 'linea_tiempo', (string)$lineaId);
  json_response(['ok'=>true,'id'=>$lineaId,'eventos'=>$count]);

} catch (Throwable $e) {
  if ($pdo->inTransaction()) $pdo->rollBack();
  error_log("LT SAVE ERROR: ".$e->getMessage());
  json_response(['ok'=>false,'message'=>'Error guardando Línea de tiempo.'], 500);
}
