<?php
$authApp = 'autos';
session_start();
require __DIR__ . '/../../config/auth.php';
require __DIR__ . '/../../../../../config/db2.php';
require_once __DIR__ . '/../../lib/helpers.php';

if (!perm('autos', 'agregar')) { http_response_code(403); exit('Sin permiso'); }

$errores = [];

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $cuij_principal = trim($_POST['cuij_principal'] ?? '');
    $imputados      = trim($_POST['imputados'] ?? '');
    if (!$cuij_principal)  $errores[] = 'El CUIJ principal es obligatorio.';
    if (!$imputados)        $errores[] = 'Los imputados son obligatorios.';
    if (empty($_POST['fecha_auto_apertura'])) $errores[] = 'La fecha del AA es obligatoria.';
    if (empty($_POST['fecha_acusacion']))      $errores[] = 'La fecha de acusación es obligatoria.';

    // Validar orden de fechas procesales
    $hoy = date('Y-m-d');
    $date_seq = [
        'fecha_acusacion'             => 'Acusación',
        'fecha_preliminar'            => 'Preliminar',
        'fecha_resolucion_preliminar' => 'Resolución',
        'fecha_auto_apertura'         => 'Auto AA',
        'fecha_ingreso_agenda'        => 'Ingreso UAJ',
    ];
    $prev_v = null; $prev_l = '';
    foreach ($date_seq as $fld => $lbl) {
        $val = $_POST[$fld] ?? '';
        if (!$val) continue;
        if ($val > $hoy) $errores[] = "Fecha de $lbl no puede ser posterior a hoy.";
        if ($prev_v && $val < $prev_v) $errores[] = "Fecha de $lbl debe ser ≥ $prev_l ($prev_v).";
        $prev_v = $val; $prev_l = $lbl;
    }

    if (empty($errores)) {
        $n  = fn($k, $def=null) => (($_POST[$k]??'')!=='') ? $_POST[$k] : $def;
        $ni = fn($k)            => (($_POST[$k]??'')!=='') ? (int)$_POST[$k] : null;

        $prioridad = calcular_prioridad([
            'estado_imputado'          => $_POST['estado_imputado'] ?? 'En libertad',
            'fecha_detencion'          => $n('fecha_detencion'),
            'vencimiento_pp_actual'    => $n('vencimiento_pp_actual'),
            'fecha_auto_apertura'      => $_POST['fecha_auto_apertura'],
            'medidas_juzgado_familia'  => isset($_POST['medidas_familia']) ? 1 : 0,
            'fecha_prescripcion_menor' => $n('fecha_pres_menor'),
            'fecha_prescripcion_mayor' => $n('fecha_pres_mayor'),
            'prioridad_agregada'       => (int)($_POST['prioridad_agregada'] ?? 0),
        ]);

        $pdo->beginTransaction();
        try {
            $sql = "INSERT INTO agj_autos_apertura (
                cuij_principal, otros_cuijs, imputados, cantidad_imputados, delitos,
                fecha_acusacion, fecha_preliminar, fecha_resolucion_preliminar,
                fecha_auto_apertura, fecha_ingreso_agenda, motivo_no_agendamiento,
                testigos_aa, testigos_fiscalia, testigos_querella, testigos_defensa,
                jornadas_en_aa, jornadas_agregadas_juez, duplicidad_plazos,
                cantidad_detenidos, estado_imputado,
                fecha_detencion, vencimiento_pp_2, vencimiento_pp_3, vencimiento_pp_actual,
                tipo_tribunal, juez_aa_id,
                delito_menor, articulos_delito_menor,
                prescripcion_menor_anios, prescripcion_menor_meses,
                ultima_interruptiva_menor, fecha_prescripcion_menor,
                delito_mayor, articulos_delito_mayor,
                prescripcion_mayor_anios, prescripcion_mayor_meses,
                ultima_interruptiva_mayor, fecha_prescripcion_mayor,
                medidas_juzgado_familia, detalle_medidas_familia,
                pena_solicitada_anios, pena_solicitada_meses,
                fecha_entrega_fundamentos,
                estado, prioridad, prioridad_agregada, observaciones
            ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

            $pdo->prepare($sql)->execute([
                $cuij_principal,
                $n('otros_cuijs'),
                $imputados,
                $ni('cantidad_imputados'),
                $n('delitos'),
                $n('fecha_acusacion'), $n('fecha_preliminar'), $n('fecha_resolucion_preliminar'),
                $_POST['fecha_auto_apertura'], $n('fecha_ingreso_agenda'), $n('motivo_no_agendamiento'),
                (int)($_POST['testigos_aa']??0),
                $ni('testigos_fiscalia'), $ni('testigos_querella'), $ni('testigos_defensa'),
                $ni('jornadas_en_aa'), $ni('jornadas_agregadas_juez'),
                isset($_POST['duplicidad_plazos'])?1:0,
                (int)($_POST['cantidad_detenidos']??0), $_POST['estado_imputado']??'En libertad',
                $n('fecha_detencion'), $n('vencimiento_pp_2'), $n('vencimiento_pp_3'), $n('vencimiento_pp_actual'),
                $n('tipo_tribunal'),
                $n('juez_aa_id'),
                $n('delito_menor'), $n('articulos_delito_menor'),
                $ni('pres_menor_anios'), $ni('pres_menor_meses'),
                $n('uf_menor'), $n('fecha_pres_menor'),
                $n('delito_mayor'), $n('articulos_delito_mayor'),
                $ni('pres_mayor_anios'), $ni('pres_mayor_meses'),
                $n('uf_mayor'), $n('fecha_pres_mayor'),
                isset($_POST['medidas_familia'])?1:0, $n('detalle_medidas'),
                $ni('pena_anios'), $ni('pena_meses'),
                $n('fecha_entrega_fundamentos'),
                $_POST['estado_aa']??'Para Agendar', $prioridad, (int)($_POST['prioridad_agregada']??0), $n('observaciones'),
            ]);
            $newId = (int)$pdo->lastInsertId();

            $form_jipp = array_filter($_POST['jueces_ipp'] ?? []);
            $auto_jipp = jueces_de_cuij($pdo, $cuij_principal, $_POST['otros_cuijs'] ?? '');
            guardar_jueces_ipp($pdo, $newId, array_values(array_unique(array_merge($form_jipp, $auto_jipp))));

            $litigantes = [];
            foreach ($_POST['lit_id']??[] as $i => $lid) {
                if (!$lid) continue;
                $litigantes[] = ['litigante_id' => $lid, 'rol_en_causa' => $_POST['lit_rol'][$i] ?? 'Fiscal'];
            }
            guardar_litigantes($pdo, $newId, $litigantes);

            $pdo->commit();
            header("Location: verAuto.php?id=$newId&msg=Auto+de+Apertura+creado.");
            exit;
        } catch(Throwable $e) {
            $pdo->rollBack();
            $errores[] = 'Error al guardar: ' . $e->getMessage();
        }
    }
}

$jueces_list = $pdo->query(
    "SELECT juez_id, nombre FROM mrbs_juez
     WHERE instancia=1 AND activo=1 AND juez_id NOT IN ('J000','JT00','JC00','JIPP')
     ORDER BY nombre"
)->fetchAll();

$fiscales = $pdo->query(
    "SELECT litigante_id, nombre FROM v_litigantes WHERE rol='Fiscal' AND activo=1 ORDER BY nombre"
)->fetchAll();

$defensores = $pdo->query(
    "SELECT litigante_id, nombre, rol FROM v_litigantes
     WHERE rol IN ('Defensor Público','Defensor Privado') AND activo=1 ORDER BY nombre"
)->fetchAll();

$jueces_json    = json_encode(array_map(fn($j) => ['v'=>$j['juez_id'],  'l'=>$j['nombre']], $jueces_list),   JSON_HEX_APOS|JSON_HEX_QUOT);
$fiscales_json  = json_encode(array_map(fn($f) => ['v'=>$f['litigante_id'],'l'=>$f['nombre']], $fiscales),    JSON_HEX_APOS|JSON_HEX_QUOT);
$defensores_json= json_encode(array_map(fn($d) => ['v'=>$d['litigante_id'],'l'=>$d['nombre'].' ('.$d['rol'].')'], $defensores), JSON_HEX_APOS|JSON_HEX_QUOT);

$p = $_POST;
$sv = fn($k) => htmlspecialchars($p[$k]??'');
$estados_list = ['En espera','Para Agendar','Programado','Agendado','Sobreagendado','Realizado','Abreviado','Cancelado'];
$hoy_str = date('Y-m-d');

$paginaActual = 'juicios';
require __DIR__ . '/../../config/menu.php';
?>
<div class="ph">
  <div><h1>➕ Nuevo Auto de Apertura</h1>
  <div class="bc"><a href="listarAutos.php">Autos</a> · Nuevo</div></div>
</div>

<?php if(!empty($errores)): ?>
<div class="msg msg-err"><strong>Corregir:</strong><br><?php foreach($errores as $e) echo "• $e<br>"; ?></div>
<?php endif; ?>

<form method="POST" id="frmAA">
<!-- ═══ IDENTIFICACIÓN ═══════════════════════════════════════ -->
<div class="card">
  <div class="sec">Identificación del expediente</div>
  <div class="fg">
    <div class="ff">
      <label>CUIJ Principal * <small style="color:#64748b">formato 21-99999999-9</small></label>
      <input type="text" name="cuij_principal" id="cuij_principal"
             value="<?=$sv('cuij_principal')?>"
             placeholder="21-00000000-0" maxlength="15"
             pattern="\d{2}-\d{8}-\d" title="Formato: 21-99999999-9" required
             style="font-family:monospace;letter-spacing:1px">
    </div>
    <div class="ff sp2">
      <label>Otros CUIJs <small style="color:#64748b">(separados por espacio)</small></label>
      <input type="text" name="otros_cuijs" value="<?=$sv('otros_cuijs')?>" style="font-family:monospace">
    </div>
    <div class="ff sp2">
      <label>Imputados *</label>
      <input type="text" name="imputados" value="<?=$sv('imputados')?>" required>
    </div>
    <div class="ff">
      <label>Cantidad Imputados</label>
      <input type="number" name="cantidad_imputados" value="<?=$sv('cantidad_imputados')?>" min="1">
    </div>
    <div class="ff sp3">
      <label>Delitos (carátula)</label>
      <textarea name="delitos" rows="2"><?=$sv('delitos')?></textarea>
    </div>
    <div class="ff">
      <label>Estado</label>
      <select name="estado_aa">
        <?php foreach($estados_list as $e): ?>
          <option value="<?=$e?>" <?=($p['estado_aa']??'Para Agendar')===$e?'selected':''?>><?=$e?></option>
        <?php endforeach; ?>
      </select>
    </div>
    <div class="ff sp2">
      <label>Motivo de no agendamiento</label>
      <input type="text" name="motivo_no_agendamiento" value="<?=$sv('motivo_no_agendamiento')?>">
    </div>
  </div>
</div>

<!-- ═══ FECHAS PROCESALES ════════════════════════════════════ -->
<div class="card">
  <div class="sec">Fechas Procesales</div>
  <div class="fg">
    <?php foreach([
      'fecha_acusacion'             => 'Fecha Acusación *',
      'fecha_preliminar'            => 'Fecha Preliminar',
      'fecha_resolucion_preliminar' => 'Resolución Preliminar',
      'fecha_auto_apertura'         => 'Fecha Auto de Apertura *',
      'fecha_ingreso_agenda'        => 'Ingreso a UAJ',
      'fecha_entrega_fundamentos'   => 'Entrega de Fundamentos',
    ] as $fn=>$l): ?>
    <div class="ff">
      <label><?=$l?></label>
      <input type="date" name="<?=$fn?>"
             value="<?= $fn==='fecha_ingreso_agenda' ? ($sv($fn) ?: $hoy_str) : $sv($fn) ?>"
             <?=strpos($l,'*')!==false?'required':''?>>
    </div>
    <?php endforeach; ?>
  </div>
</div>

<!-- ═══ PRUEBA Y JORNADAS ════════════════════════════════════ -->
<div class="card">
  <div class="sec">Prueba y Jornadas</div>
  <div class="fg">
    <div class="ff"><label>Testigos Fiscalía</label>
      <input type="number" name="testigos_fiscalia" value="<?=$sv('testigos_fiscalia')?>" min="0">
    </div>
    <div class="ff"><label>Testigos Querella</label>
      <input type="number" name="testigos_querella" value="<?=$sv('testigos_querella')?>" min="0">
    </div>
    <div class="ff"><label>Testigos Defensa</label>
      <input type="number" name="testigos_defensa" value="<?=$sv('testigos_defensa')?>" min="0">
    </div>
    <div class="ff"><label>Jornadas en AA</label>
      <input type="number" name="jornadas_en_aa" value="<?=$sv('jornadas_en_aa')?>" min="0">
    </div>
    <div class="ff"><label>Jornadas agregadas por juez/a</label>
      <input type="number" name="jornadas_agregadas_juez" value="<?=$sv('jornadas_agregadas_juez')?>" min="0">
    </div>
    <div class="ff" style="align-self:center;padding-top:18px">
      <label><input type="checkbox" name="duplicidad_plazos" value="1"
             <?=!empty($p['duplicidad_plazos'])?'checked':''?>> Duplicidad de plazos</label>
    </div>
    <div class="ff">
      <label>Tipo de Tribunal</label>
      <select name="tipo_tribunal">
        <option value="">Sin definir</option>
        <?php foreach(['Unipersonal','Pluripersonal','Juicio por Jurados'] as $tt): ?>
          <option value="<?=$tt?>" <?=($p['tipo_tribunal']??'')===$tt?'selected':''?>><?=$tt?></option>
        <?php endforeach; ?>
      </select>
    </div>
  </div>
</div>

<!-- ═══ SITUACIÓN DE LOS IMPUTADOS ════════════════════════════ -->
<div class="card">
  <div class="sec">Situación de los Imputados</div>
  <div class="fg">
    <div class="ff">
      <label>Estado Imputados
        <span title="Al menos uno detenido: consigne Preso. Todos en libertad: consigne En Libertad o el que corresponda." style="cursor:help;color:#2563eb">ℹ️</span>
      </label>
      <select name="estado_imputado" id="sel_imp" onchange="togglePP()">
        <?php foreach(['Preso','En libertad','Rebelde','Internado'] as $ei): ?>
          <option value="<?=$ei?>" <?=($p['estado_imputado']??'En libertad')===$ei?'selected':''?>><?=$ei?></option>
        <?php endforeach; ?>
      </select>
    </div>
    <div class="ff"><label>Cantidad Imputados</label>
      <input type="number" name="cantidad_imputados2" value="<?=(int)($p['cantidad_imputados']??0)?>" min="0" style="display:none">
    </div>
    <div class="ff"><label>Cantidad Detenidos</label>
      <input type="number" name="cantidad_detenidos" value="<?=(int)($p['cantidad_detenidos']??0)?>" min="0">
    </div>
    <div class="ff" id="d_det">
      <label>menor Fecha Detención <small style="color:#64748b">(calcula PP)</small></label>
      <input type="date" name="fecha_detencion" id="fecha_detencion"
             value="<?=$sv('fecha_detencion')?>" onchange="calcularPP()">
    </div>
    <div class="ff" id="d_pp2">
      <label>Vencimiento PP 2 años</label>
      <input type="date" name="vencimiento_pp_2" id="vencimiento_pp_2" value="<?=$sv('vencimiento_pp_2')?>">
    </div>
    <div class="ff" id="d_pp3">
      <label>Vencimiento PP 3 años</label>
      <input type="date" name="vencimiento_pp_3" id="vencimiento_pp_3" value="<?=$sv('vencimiento_pp_3')?>">
    </div>
    <div class="ff" id="d_ppa">
      <label>Vencimiento PP Actual <small style="color:#64748b">(editable si hay prórroga)</small></label>
      <input type="date" name="vencimiento_pp_actual" id="vencimiento_pp_actual" value="<?=$sv('vencimiento_pp_actual')?>">
    </div>
    <div class="ff" style="align-self:center">
      <label>
        <input type="checkbox" name="medidas_familia" id="chk_medidas" value="1"
               <?=!empty($p['medidas_familia'])?'checked':''?>> Medidas Juzgado de Familia
      </label>
    </div>
    <div class="ff sp2" id="d_medidas" style="<?=empty($p['medidas_familia'])?'display:none':''?>">
      <label>Detalle medidas</label>
      <input type="text" name="detalle_medidas" value="<?=$sv('detalle_medidas')?>">
    </div>
  </div>
</div>

<!-- ═══ PARTES LITIGANTES ════════════════════════════════════ -->
<div class="card">
  <div class="sec">Partes Litigantes del AA</div>
  <p style="font-size:12px;color:#64748b;margin-bottom:14px">
    ℹ️ Los jueces del <strong>debate</strong> se asignan al agendar. Aquí van el juez firmante del AA y los intervinientes en IPP.
  </p>

  <div style="margin-bottom:16px">
    <label style="font-weight:bold;font-size:12px;color:#475569">Juez firmante del AA</label>
    <div style="margin-top:4px">
      <select name="juez_aa_id" style="width:50%;padding:6px 8px;border:1px solid #d1d5db;border-radius:5px;font-size:13px">
        <option value="">— Sin asignar —</option>
        <?php foreach($jueces_list as $j): ?>
          <option value="<?=$j['juez_id']?>" <?=($p['juez_aa_id']??'')===$j['juez_id']?'selected':''?>>
            <?=htmlspecialchars($j['nombre'])?>
          </option>
        <?php endforeach; ?>
      </select>
    </div>
  </div>

  <div class="sec" style="font-size:13px;border-color:#c7d2fe;color:#4338ca">Jueces que intervinieron en IPP</div>
  <div id="jueces_ipp_container">
    <?php
    $prev_jipp = array_filter($_POST['jueces_ipp']??['']);
    if(empty($prev_jipp)) $prev_jipp = [''];
    foreach($prev_jipp as $jid):
    ?>
    <div class="jipp-row" style="display:flex;gap:8px;margin-bottom:6px;align-items:center">
      <select name="jueces_ipp[]" style="flex:1;padding:6px 8px;border:1px solid #d1d5db;border-radius:5px;font-size:13px">
        <option value="">— Seleccionar juez —</option>
        <?php foreach($jueces_list as $j): ?>
          <option value="<?=$j['juez_id']?>" <?=$jid===$j['juez_id']?'selected':''?>><?=htmlspecialchars($j['nombre'])?></option>
        <?php endforeach; ?>
      </select>
      <button type="button" onclick="this.closest('.jipp-row').remove()" class="btn btn-r btn-sm">✕</button>
    </div>
    <?php endforeach; ?>
  </div>
  <button type="button" id="btn_add_jipp" class="btn btn-g btn-sm" style="margin-bottom:18px">+ Agregar juez IPP</button>

  <div class="sec" style="font-size:13px;border-color:#c7d2fe;color:#4338ca">Fiscales · Defensores · Querellantes</div>
  <div id="lit_container">
    <?php
    $prev_lits = [];
    if(!empty($p['lit_id'])) {
        foreach($p['lit_id'] as $i=>$lid) {
            if($lid) $prev_lits[] = [$lid, $p['lit_rol'][$i]??'Fiscal'];
        }
    }
    if(empty($prev_lits)) $prev_lits = [['','Fiscal'],['','Defensor'],['','Querellante']];
    foreach($prev_lits as [$lid,$rol]):
    ?>
    <div class="lit-row" style="display:flex;gap:8px;margin-bottom:6px;align-items:center">
      <select name="lit_rol[]" style="width:130px;padding:6px 8px;border:1px solid #d1d5db;border-radius:5px;font-size:13px">
        <option value="Fiscal"      <?=$rol==='Fiscal'      ?'selected':''?>>Fiscal</option>
        <option value="Defensor"    <?=$rol==='Defensor'    ?'selected':''?>>Defensor</option>
        <option value="Querellante" <?=$rol==='Querellante' ?'selected':''?>>Querellante</option>
      </select>
      <select name="lit_id[]" style="flex:1;padding:6px 8px;border:1px solid #d1d5db;border-radius:5px;font-size:13px">
        <option value="">— Seleccionar —</option>
        <optgroup label="Fiscales (MPA)">
          <?php foreach($fiscales as $fi): ?>
            <option value="<?=$fi['litigante_id']?>" <?=$lid===$fi['litigante_id']?'selected':''?>><?=htmlspecialchars($fi['nombre'])?></option>
          <?php endforeach; ?>
        </optgroup>
        <optgroup label="Defensores / Querellantes">
          <?php foreach($defensores as $d): ?>
            <option value="<?=$d['litigante_id']?>" <?=$lid===$d['litigante_id']?'selected':''?>><?=htmlspecialchars($d['nombre'])?> (<?=$d['rol']?>)</option>
          <?php endforeach; ?>
        </optgroup>
      </select>
      <button type="button" onclick="this.closest('.lit-row').remove()" class="btn btn-r btn-sm">✕</button>
    </div>
    <?php endforeach; ?>
  </div>
  <button type="button" id="btn_add_lit" class="btn btn-g btn-sm" style="margin-bottom:8px">+ Agregar litigante</button>
</div>

<!-- ═══ PRESCRIPCIÓN ═════════════════════════════════════════ -->
<div class="card">
  <div class="sec">Prescripción</div>
  <div style="background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;padding:12px;margin-bottom:10px">
    <div style="font-size:12px;font-weight:700;color:#475569;margin-bottom:8px">DELITO MENOR / ÚNICO</div>
    <div style="display:grid;grid-template-columns:2fr 1fr 3rem 3rem 1fr 1fr;gap:8px;align-items:end">
      <div class="ff"><label>Descripción</label><input type="text" name="delito_menor" value="<?=$sv('delito_menor')?>"></div>
      <div class="ff"><label>Arts. CP</label><input type="text" name="articulos_delito_menor" value="<?=$sv('articulos_delito_menor')?>"></div>
      <div class="ff"><label>Años</label><input type="number" name="pres_menor_anios" value="<?=$sv('pres_menor_anios')?>" min="0" style="text-align:center"></div>
      <div class="ff"><label>Meses</label><input type="number" name="pres_menor_meses" value="<?=$sv('pres_menor_meses')?>" min="0" max="11" style="text-align:center"></div>
      <div class="ff"><label>Últ. interruptiva</label><input type="date" name="uf_menor" value="<?=$sv('uf_menor')?>"></div>
      <div class="ff"><label>Fecha prescripción</label><input type="date" name="fecha_pres_menor" value="<?=$sv('fecha_pres_menor')?>"></div>
    </div>
  </div>
  <div style="background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;padding:12px">
    <div style="font-size:12px;font-weight:700;color:#475569;margin-bottom:8px">DELITO MAYOR</div>
    <div style="display:grid;grid-template-columns:2fr 1fr 3rem 3rem 1fr 1fr;gap:8px;align-items:end">
      <div class="ff"><label>Descripción</label><input type="text" name="delito_mayor" value="<?=$sv('delito_mayor')?>"></div>
      <div class="ff"><label>Arts. CP</label><input type="text" name="articulos_delito_mayor" value="<?=$sv('articulos_delito_mayor')?>"></div>
      <div class="ff"><label>Años</label><input type="number" name="pres_mayor_anios" value="<?=$sv('pres_mayor_anios')?>" min="0" style="text-align:center"></div>
      <div class="ff"><label>Meses</label><input type="number" name="pres_mayor_meses" value="<?=$sv('pres_mayor_meses')?>" min="0" max="11" style="text-align:center"></div>
      <div class="ff"><label>Últ. interruptiva</label><input type="date" name="uf_mayor" value="<?=$sv('uf_mayor')?>"></div>
      <div class="ff"><label>Fecha prescripción</label><input type="date" name="fecha_pres_mayor" value="<?=$sv('fecha_pres_mayor')?>"></div>
    </div>
  </div>
</div>

<!-- ═══ PENA ══════════════════════════════════════════════════ -->
<div class="card">
  <div class="sec">Pena <span style="font-size:12px;font-weight:400;color:#64748b">(post-juicio)</span></div>
  <div class="fg">
    <div class="ff"><label>Años</label><input type="number" name="pena_anios" value="<?=$sv('pena_anios')?>" min="0"></div>
    <div class="ff"><label>Meses</label><input type="number" name="pena_meses" value="<?=$sv('pena_meses')?>" min="0" max="11"></div>
  </div>
</div>

<!-- ═══ OBSERVACIONES ════════════════════════════════════════ -->
<div class="card">
  <div class="ff"><label>Observaciones</label>
    <textarea name="observaciones" rows="3" style="width:100%"><?=$sv('observaciones')?></textarea>
  </div>
</div>

<!-- ═══ PRIORIDAD ════════════════════════════════════════ -->
<div class="card">
  <div class="sec">Prioridad</div>
  <div class="fg">
    <div class="ff">
      <label>Ajuste manual <small style="color:#64748b">(0 – 10000)</small></label>
      <input type="number" name="prioridad_agregada" value="<?= (int)($sv('prioridad_agregada') ?: 0) ?>" min="0" max="10000">
    </div>
  </div>
  <div style="margin-top:10px">
    <div style="display:flex;align-items:center;gap:12px;margin-bottom:8px">
      <span id="prio_badge_live"></span>
      <span style="font-size:12px;color:#64748b">Estimación en tiempo real (se recalcula al guardar)</span>
    </div>
    <table id="prio_table_live" style="width:100%;font-size:12px;border-collapse:collapse"></table>
  </div>
</div>

<div style="display:flex;gap:10px;padding-bottom:20px">
  <button type="submit" class="btn btn-s">💾 Guardar Auto de Apertura</button>
  <a href="listarAutos.php" class="btn btn-g">Cancelar</a>
</div>
</form>

</div></body></html>
<script>
const JUECES    = <?= $jueces_json ?>;
const FISCALES  = <?= $fiscales_json ?>;
const DEFENSORES= <?= $defensores_json ?>;

function buildSelect(items, sel, nameAttr) {
    const s = document.createElement('select');
    s.name = nameAttr;
    s.style.cssText = 'flex:1;padding:6px 8px;border:1px solid #d1d5db;border-radius:5px;font-size:13px';
    s.add(new Option('— Seleccionar juez —',''));
    items.forEach(i => { const o=new Option(i.l,i.v); if(i.v===sel)o.selected=true; s.add(o); });
    return s;
}

// Dropdown con búsqueda integrada para selects de litigante
function makeLitDropdown(row) {
    const selRol = row.querySelector('select[name="lit_rol[]"]');
    const selLit = row.querySelector('select[name="lit_id[]"]');
    if (!selLit || selLit.dataset.csApplied) return;
    selLit.dataset.csApplied = '1';
    selLit.style.display = 'none';

    const getRol = () => selRol ? selRol.value : 'Fiscal';

    const wrap = document.createElement('div');
    wrap.style.cssText = 'position:relative;flex:1;min-width:0';
    selLit.parentNode.insertBefore(wrap, selLit);
    wrap.appendChild(selLit);

    const lbl = document.createElement('span');
    lbl.style.cssText = 'flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap';
    const arr = document.createElement('span');
    arr.textContent = '▾'; arr.style.cssText = 'color:#94a3b8;font-size:11px;flex-shrink:0';
    const btn = document.createElement('div');
    btn.tabIndex = 0;
    btn.style.cssText = 'padding:6px 8px;border:1px solid #d1d5db;border-radius:5px;font-size:13px;cursor:pointer;background:#fff;min-height:34px;display:flex;justify-content:space-between;align-items:center;gap:4px;user-select:none;width:100%;box-sizing:border-box';
    btn.appendChild(lbl); btn.appendChild(arr);

    const panel = document.createElement('div');
    panel.style.cssText = 'display:none;position:absolute;top:calc(100% + 2px);left:0;right:0;z-index:9999;background:#fff;border:1px solid #93c5fd;border-radius:6px;box-shadow:0 4px 16px rgba(0,0,0,.15)';
    const inp = document.createElement('input');
    inp.type = 'search'; inp.placeholder = 'Buscar...'; inp.autocomplete = 'off';
    inp.style.cssText = 'width:100%;padding:7px 10px;border:none;border-bottom:1px solid #e2e8f0;border-radius:6px 6px 0 0;font-size:13px;box-sizing:border-box;outline:none';
    const ul = document.createElement('ul');
    ul.style.cssText = 'margin:0;padding:4px 0;list-style:none;max-height:240px;overflow-y:auto;font-size:13px';
    panel.appendChild(inp); panel.appendChild(ul);
    wrap.appendChild(btn); wrap.appendChild(panel);

    let isOpen = false, currVal = selLit.value || '';

    function setLabel() {
        if (!currVal) { lbl.textContent = '— Seleccionar —'; lbl.style.color = '#9ca3af'; return; }
        const found = [...FISCALES, ...DEFENSORES].find(i => i.v === currVal);
        lbl.textContent = found ? found.l : '— Seleccionar —';
        lbl.style.color = found ? '' : '#9ca3af';
    }
    setLabel();

    function pick(v, label) {
        currVal = v;
        selLit.innerHTML = '';
        selLit.appendChild(new Option(label || '', v, true, true));
        setLabel(); close();
    }

    function renderList(q) {
        ul.innerHTML = '';
        const rol = getRol();
        const liE = document.createElement('li');
        liE.textContent = '— Seleccionar —';
        liE.style.cssText = 'padding:6px 12px;cursor:pointer;color:#9ca3af;font-style:italic';
        liE.addEventListener('click', () => pick('', ''));
        liE.addEventListener('mouseenter', () => liE.style.background = '#f8fafc');
        liE.addEventListener('mouseleave', () => liE.style.background = '');
        ul.appendChild(liE);
        function addGroup(label, items) {
            const matches = items.filter(i => !q || i.l.toLowerCase().includes(q));
            if (!matches.length) return;
            const hdr = document.createElement('li');
            hdr.textContent = label;
            hdr.style.cssText = 'padding:5px 12px 3px;font-size:11px;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.04em;pointer-events:none;background:#f8fafc';
            ul.appendChild(hdr);
            matches.forEach(item => {
                const li = document.createElement('li');
                li.textContent = item.l;
                const isSel = item.v === currVal;
                li.style.cssText = 'padding:7px 12px 7px 20px;cursor:pointer;' + (isSel ? 'background:#eff6ff;font-weight:600;color:#1d4ed8' : '');
                li.addEventListener('mouseenter', () => { if (item.v !== currVal) li.style.background = '#f1f5f9'; });
                li.addEventListener('mouseleave', () => { li.style.background = item.v === currVal ? '#eff6ff' : ''; });
                li.addEventListener('click', () => pick(item.v, item.l));
                ul.appendChild(li);
            });
        }
        if (rol !== 'Defensor') addGroup('Fiscales / Querellantes (MPA)', FISCALES);
        if (rol === 'Defensor') addGroup('Defensores', DEFENSORES);
    }

    function open() {
        inp.value = ''; renderList('');
        panel.style.display = 'block'; isOpen = true; arr.textContent = '▴';
        setTimeout(() => inp.focus(), 0);
    }
    function close() { panel.style.display = 'none'; isOpen = false; arr.textContent = '▾'; }

    btn.addEventListener('click', e => { e.stopPropagation(); isOpen ? close() : open(); });
    btn.addEventListener('keydown', e => {
        if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); isOpen ? close() : open(); }
        if (e.key === 'Escape') close();
    });
    inp.addEventListener('keydown', e => { if (e.key === 'Escape') close(); });
    inp.addEventListener('input', () => renderList(inp.value.toLowerCase().trim()));
    document.addEventListener('click', e => { if (!wrap.contains(e.target)) close(); }, true);
    if (selRol) {
        selRol.addEventListener('change', () => {
            currVal = ''; selLit.innerHTML = '';
            selLit.appendChild(new Option('', '', true, true));
            setLabel();
            if (isOpen) renderList(inp.value.toLowerCase().trim());
        });
    }
}

function btnX(cls) {
    const b=document.createElement('button'); b.type='button'; b.className='btn btn-r btn-sm'; b.textContent='✕';
    b.onclick=()=>b.closest(cls).remove(); return b;
}
document.getElementById('btn_add_jipp').addEventListener('click',()=>{
    const row=document.createElement('div'); row.className='jipp-row';
    row.style.cssText='display:flex;gap:8px;margin-bottom:6px;align-items:center';
    row.appendChild(buildSelect(JUECES,'','jueces_ipp[]')); row.appendChild(btnX('.jipp-row'));
    document.getElementById('jueces_ipp_container').appendChild(row);
});
document.getElementById('btn_add_lit').addEventListener('click',()=>{
    const row=document.createElement('div'); row.className='lit-row';
    row.style.cssText='display:flex;gap:8px;margin-bottom:6px;align-items:center';
    const selRol=document.createElement('select'); selRol.name='lit_rol[]';
    selRol.style.cssText='width:130px;padding:6px 8px;border:1px solid #d1d5db;border-radius:5px;font-size:13px';
    [['Fiscal'],['Defensor'],['Querellante']].forEach(([v])=>selRol.add(new Option(v,v)));
    const selLit=document.createElement('select'); selLit.name='lit_id[]';
    selLit.add(new Option('',''));
    row.appendChild(selRol); row.appendChild(selLit); row.appendChild(btnX('.lit-row'));
    document.getElementById('lit_container').appendChild(row);
    makeLitDropdown(row);
});
document.querySelectorAll('.lit-row').forEach(makeLitDropdown);
document.getElementById('cuij_principal').addEventListener('input',function(){
    let d=this.value.replace(/\D/g,'').slice(0,11);
    this.value=d.length<=2?d:d.length<=10?d.slice(0,2)+'-'+d.slice(2):d.slice(0,2)+'-'+d.slice(2,10)+'-'+d.slice(10);
});
function calcularPP(){
    const fd=document.getElementById('fecha_detencion').value; if(!fd) return;
    const det=new Date(fd); if(isNaN(det)) return;
    const pp2=new Date(det); pp2.setFullYear(pp2.getFullYear()+2);
    const pp3=new Date(det); pp3.setFullYear(pp3.getFullYear()+3);
    document.getElementById('vencimiento_pp_2').value=pp2.toISOString().slice(0,10);
    document.getElementById('vencimiento_pp_3').value=pp3.toISOString().slice(0,10);
    const a=document.getElementById('vencimiento_pp_actual');
    if(!a.value) a.value=pp2.toISOString().slice(0,10);
    actualizarPrioridad();
}
function togglePP(){
    const preso=document.getElementById('sel_imp').value==='Preso';
    ['d_det','d_pp2','d_pp3','d_ppa'].forEach(i=>document.getElementById(i).style.display=preso?'':'none');
    actualizarPrioridad();
}
document.getElementById('chk_medidas').addEventListener('change',function(){
    document.getElementById('d_medidas').style.display=this.checked?'':'none';
});
togglePP();
if(document.getElementById('fecha_detencion').value) calcularPP();

// ── Prioridad en tiempo real ──────────────────────────────────
function prioBadgeHTML(p){
    var lbl,bg,col;
    if(p>=700){lbl='Alta';bg='#fee2e2';col='#dc2626';}
    else if(p>=350){lbl='Media';bg='#fef3c7';col='#d97706';}
    else{lbl='Baja';bg='#d1fae5';col='#16a34a';}
    return '<span style="display:inline-flex;flex-direction:column;align-items:center;background:'+bg+';color:'+col
          +';padding:3px 10px;border-radius:10px;font-weight:700;line-height:1.3">'
          +'<span style="font-size:10px">'+lbl+'</span><span style="font-size:18px">'+p+'</span></span>';
}
function calcPrioridad(){
    var today=new Date(); today.setHours(0,0,0,0);
    function diff(v){ if(!v) return null; var d=new Date(v); d.setHours(0,0,0,0); return isNaN(d)?null:Math.round((today-d)/86400000); }
    var p=100, comps=[['Base',100]];
    var faaEl=document.querySelector('[name="fecha_auto_apertura"]');
    var diasAA=diff(faaEl?faaEl.value:'');
    if(diasAA!==null){comps.push(['Antigüedad del caso ('+diasAA+' días desde AA)',diasAA]);p+=diasAA;}
    var estImp=(document.getElementById('sel_imp')||{value:''}).value;
    if(estImp==='Preso'){
        var dp=diff((document.getElementById('fecha_detencion')||{value:''}).value);
        if(dp!==null){var v=dp*3;comps.push(['Días en PP: '+dp+' días × 3',v]);p+=v;}
        var vppEl=document.getElementById('vencimiento_pp_actual');
        if(vppEl&&vppEl.value){
            var vpp=new Date(vppEl.value);vpp.setHours(0,0,0,0);
            if(vpp<=today){comps.push(['PP vencida',1000]);p+=1000;}
            else{var dv=Math.round((vpp-today)/86400000);if(dv<=90){comps.push(['PP vence en '+dv+' días (< 90)',500]);p+=500;}}
        }
    } else {
        var chk=document.getElementById('chk_medidas');
        if(chk&&chk.checked&&diasAA!==null){var vm=diasAA*3;comps.push(['Medidas Juzgado de Familia ('+diasAA+' días × 3)',vm]);p+=vm;}
    }
    var prescF=[(document.querySelector('[name="fecha_pres_menor"]')||{value:''}).value,
                (document.querySelector('[name="fecha_pres_mayor"]')||{value:''}).value];
    var tipos=['menor','mayor'],added=false;
    for(var i=0;i<2;i++){
        if(prescF[i]&&!added){var fd=new Date(prescF[i]);fd.setHours(0,0,0,0);if(fd>today){var dpf=Math.round((fd-today)/86400000);if(dpf<=90){comps.push(['Prescripción '+tipos[i]+' vence en '+dpf+' días (< 90)',500]);p+=500;added=true;}}}
    }
    var agr=parseInt((document.querySelector('[name="prioridad_agregada"]')||{value:'0'}).value||'0',10)||0;
    if(agr!==0){comps.push(['Ajuste manual',agr]);p+=agr;}
    return{total:Math.max(0,p),componentes:comps};
}
function actualizarPrioridad(){
    var res=calcPrioridad();
    var b=document.getElementById('prio_badge_live'); if(b) b.innerHTML=prioBadgeHTML(res.total);
    var t=document.getElementById('prio_table_live'); if(!t) return;
    var h='';
    res.componentes.forEach(function(c){h+='<tr style="border-top:1px solid #f1f5f9"><td style="padding:3px 8px;color:#475569">'+c[0]+'</td><td style="padding:3px 8px;text-align:right;font-weight:600;color:#1e293b;white-space:nowrap">+ '+c[1]+'</td></tr>';});
    h+='<tr style="border-top:2px solid #2563eb;background:#eff6ff"><td style="padding:5px 8px;font-weight:700;color:#1e40af">Total estimado</td><td style="padding:5px 8px;text-align:right;font-size:18px;font-weight:700;color:#2563eb">'+res.total+'</td></tr>';
    t.innerHTML=h;
}
['fecha_auto_apertura','fecha_detencion','vencimiento_pp_actual','fecha_pres_menor','fecha_pres_mayor','prioridad_agregada'].forEach(function(nm){
    var el=document.querySelector('[name="'+nm+'"]'); if(el) el.addEventListener('change',actualizarPrioridad);
});
document.getElementById('chk_medidas').addEventListener('change',actualizarPrioridad);
actualizarPrioridad();
</script>
