<?php
include('conexion.php');
include_once('nomina_helpers.php');
include_once('nomina_legal_helpers.php');
if (session_status() !== PHP_SESSION_ACTIVE) { session_start(); }
if (!isset($_SESSION['usuario'])) { header('Location: login.php'); exit; }

nomina_ensure_cargos_schema($conexion);
nomina_ensure_vacaciones_schema($conexion);
$bcvInfo = nomina_bcv_auto_refresh($conexion, isset($_GET['refresh_bcv']) && (int)$_GET['refresh_bcv'] === 1);
$bcvLatest = $bcvInfo['latest'] ?? null;
$schema = nomina_detect_novedades_schema($conexion);

$fechaCorte = nomina_date_to_iso($_REQUEST['fecha_corte'] ?? date('Y-m-d'));
if ($fechaCorte === '') { $fechaCorte = date('Y-m-d'); }
$tasaRef = nomina_normalize_decimal($_REQUEST['tasa_bcv_ref'] ?? ($bcvLatest['rate_value'] ?? 1), 1);
if ($tasaRef <= 0) { $tasaRef = 1; }
$periodoSync = (int)($_REQUEST['periodo_sync'] ?? 0);
$selectedPersonaId = (int)($_REQUEST['persona_id'] ?? 0);

$periodos = [];
$resPer = mysqli_query($conexion, "SELECT id, codigo, fecha_desde, fecha_hasta, estado FROM periodos_nomina ORDER BY fecha_desde DESC");
if ($resPer) {
    while ($row = mysqli_fetch_assoc($resPer)) { $periodos[] = $row; }
}

$personas = nomina_fetch_active_people($conexion);
$eventsSummary = nomina_vacaciones_fetch_events_summary($conexion);
$rows = [];
foreach ($personas as $persona) {
    $summary = $eventsSummary[(int)$persona['id']] ?? [];
    $cycleUsage = nomina_vacaciones_fetch_cycle_usage($conexion, (int)$persona['id']);
    $historicalUsage = nomina_vacaciones_fetch_historical_usage($conexion, (int)$persona['id']);
    $balance = nomina_vacaciones_calculate_balance($persona, $summary, $fechaCorte, $tasaRef, $cycleUsage, $historicalUsage);
    $rows[] = ['persona' => $persona, 'balance' => $balance, 'summary' => $summary, 'cycle_usage' => $cycleUsage, 'historical_usage' => $historicalUsage];
}

usort($rows, function($a, $b) {
    if ($a['balance']['pending_total_bs'] == $b['balance']['pending_total_bs']) {
        return strcmp(($a['persona']['apellido'] ?? '') . ($a['persona']['nombre'] ?? ''), ($b['persona']['apellido'] ?? '') . ($b['persona']['nombre'] ?? ''));
    }
    return ($a['balance']['pending_total_bs'] < $b['balance']['pending_total_bs']) ? 1 : -1;
});

$selectedPersona = $selectedPersonaId ? nomina_vacaciones_find_persona($personas, $selectedPersonaId) : null;
$selectedSummary = $selectedPersona ? ($eventsSummary[(int)$selectedPersona['id']] ?? []) : [];
$selectedCycleUsage = $selectedPersona ? nomina_vacaciones_fetch_cycle_usage($conexion, (int)$selectedPersona['id']) : [];
$selectedHistoricalUsage = $selectedPersona ? nomina_vacaciones_fetch_historical_usage($conexion, (int)$selectedPersona['id']) : [];
$selectedBalance = $selectedPersona ? nomina_vacaciones_calculate_balance($selectedPersona, $selectedSummary, $fechaCorte, $tasaRef, $selectedCycleUsage, $selectedHistoricalUsage) : null;

if ($_SERVER['REQUEST_METHOD'] === 'POST' && (isset($_POST['registrar_vacaciones']) || isset($_POST['registrar_ajuste_historico']))) {
    $personaIdPost = (int)($_POST['persona_id'] ?? 0);
    $selectedPersonaId = $personaIdPost;
    $selectedPersona = $personaIdPost ? nomina_vacaciones_find_persona($personas, $personaIdPost) : null;
    if (!$selectedPersona) {
        nomina_flash_set('error', 'Selecciona un trabajador válido para registrar vacaciones legales.');
        header('Location: nomina_vacaciones.php?fecha_corte=' . urlencode($fechaCorte) . '&tasa_bcv_ref=' . urlencode((string)$tasaRef));
        exit;
    }
    $selectedSummary = $eventsSummary[(int)$selectedPersona['id']] ?? [];
    $selectedCycleUsage = nomina_vacaciones_fetch_cycle_usage($conexion, (int)$selectedPersona['id']);
    $selectedHistoricalUsage = nomina_vacaciones_fetch_historical_usage($conexion, (int)$selectedPersona['id']);
    $selectedBalance = nomina_vacaciones_calculate_balance($selectedPersona, $selectedSummary, $fechaCorte, $tasaRef, $selectedCycleUsage, $selectedHistoricalUsage);

    $fechaDocumento = nomina_date_to_iso($_POST['fecha_documento'] ?? date('Y-m-d'));
    if ($fechaDocumento === '') { $fechaDocumento = date('Y-m-d'); }
    $periodoSync = (int)($_POST['periodo_sync'] ?? 0);
    $observacion = trim((string)($_POST['observacion'] ?? ''));

    if (isset($_POST['registrar_vacaciones'])) {
        $fechaInicio = nomina_date_to_iso($_POST['fecha_inicio'] ?? '');
        $fechaFin = nomina_date_to_iso($_POST['fecha_fin'] ?? '');
        $diasDisfrute = nomina_normalize_decimal($_POST['dias_disfrute'] ?? $selectedBalance['pending_cycle_days']);
        $diasBono = nomina_normalize_decimal($_POST['dias_bono'] ?? $selectedBalance['pending_cycle_bonus_days']);
        $cycleNo = (int)$selectedBalance['current_cycle'];

        if ($diasDisfrute < 0 || $diasBono < 0) {
            nomina_flash_set('error', 'Los días de vacaciones o bono no pueden ser negativos.');
        } elseif ($selectedBalance['completed_years'] < 1) {
            nomina_flash_set('error', 'El trabajador aún no ha completado un año de servicio para vacaciones legales ordinarias.');
        } elseif ($cycleNo <= 0) {
            nomina_flash_set('error', 'No se pudo determinar el ciclo legal actual del trabajador.');
        } elseif (nomina_vacaciones_cycle_exists($conexion, $personaIdPost, $cycleNo)) {
            nomina_flash_set('error', 'Ya existe un registro legal del ciclo ' . $cycleNo . ' para este trabajador. Si necesitas corregir históricos, usa Ajuste histórico / saldo inicial.');
        } elseif ($diasDisfrute > $selectedBalance['pending_cycle_days'] || $diasBono > $selectedBalance['pending_cycle_bonus_days']) {
            nomina_flash_set('error', 'Los días solicitados exceden el saldo pendiente del ciclo actual.');
        } else {
            $montoDisfruteBs = round($diasDisfrute * $selectedBalance['daily_bs'], 2);
            $montoBonoBs = round($diasBono * $selectedBalance['daily_bs'], 2);
            $obsFinal = $observacion !== '' ? $observacion : 'Registro legal de vacaciones';

            mysqli_begin_transaction($conexion);
            $ok = true;
            $stmt = mysqli_prepare($conexion, "INSERT INTO nomina_vacaciones_eventos (persona_id, fecha_documento, fecha_inicio, fecha_fin, tipo, ciclo_anual, es_historico, dias_disfrute, dias_bono, monto_disfrute_bs, monto_bono_bs, periodo_id, observacion, estado) VALUES (?, ?, ?, ?, 'DISFRUTE', ?, 0, ?, ?, ?, ?, ?, ?, 'REGISTRADO')");
            if ($stmt) {
                mysqli_stmt_bind_param($stmt, 'isssiddddis', $personaIdPost, $fechaDocumento, $fechaInicio, $fechaFin, $cycleNo, $diasDisfrute, $diasBono, $montoDisfruteBs, $montoBonoBs, $periodoSync, $obsFinal);
                $ok = mysqli_stmt_execute($stmt);
                $insertErr = mysqli_stmt_error($stmt);
                mysqli_stmt_close($stmt);
            } else {
                $ok = false;
                $insertErr = mysqli_error($conexion);
            }

            if ($ok && $periodoSync > 0) {
                $sync = nomina_vacaciones_sync_to_period($conexion, $schema, $periodoSync, $personaIdPost, $montoDisfruteBs + $montoBonoBs, 'Vacaciones legales: ' . $obsFinal);
                if (!$sync['ok']) {
                    $ok = false;
                    $insertErr = $sync['message'];
                }
            }

            if ($ok) {
                mysqli_commit($conexion);
                nomina_flash_set('success', 'Vacaciones legales registradas correctamente para el ciclo ' . $cycleNo . '.' . ($periodoSync > 0 ? ' También se copió el monto al período seleccionado como pago manual de apoyo.' : ''));
            } else {
                mysqli_rollback($conexion);
                nomina_flash_set('error', 'No se pudo registrar vacaciones legales: ' . ($insertErr ?: 'error desconocido'));
            }
        }
    } else {
        $histDiasDisfrute = nomina_normalize_decimal($_POST['hist_dias_disfrute'] ?? 0);
        $histDiasBono = nomina_normalize_decimal($_POST['hist_dias_bono'] ?? 0);
        $histObs = trim((string)($_POST['hist_observacion'] ?? 'Ajuste histórico de vacaciones ya disfrutadas'));
        if ($histDiasDisfrute <= 0 && $histDiasBono <= 0) {
            nomina_flash_set('error', 'Indica días históricos de disfrute o bono para registrar el ajuste.');
        } else {
            $stmt = mysqli_prepare($conexion, "INSERT INTO nomina_vacaciones_eventos (persona_id, fecha_documento, tipo, ciclo_anual, es_historico, dias_disfrute, dias_bono, monto_disfrute_bs, monto_bono_bs, periodo_id, observacion, estado) VALUES (?, ?, 'AJUSTE_HISTORICO', 0, 1, ?, ?, 0, 0, 0, ?, 'REGISTRADO')");
            if ($stmt) {
                mysqli_stmt_bind_param($stmt, 'isdds', $personaIdPost, $fechaDocumento, $histDiasDisfrute, $histDiasBono, $histObs);
                $ok = mysqli_stmt_execute($stmt);
                $insertErr = mysqli_stmt_error($stmt);
                mysqli_stmt_close($stmt);
            } else {
                $ok = false;
                $insertErr = mysqli_error($conexion);
            }
            if ($ok) {
                nomina_flash_set('success', 'Ajuste histórico de vacaciones registrado. El saldo legal pendiente ya fue recalculado.');
            } else {
                nomina_flash_set('error', 'No se pudo registrar el ajuste histórico: ' . ($insertErr ?: 'error desconocido'));
            }
        }
    }

    $params = [
        'fecha_corte=' . urlencode($fechaCorte),
        'tasa_bcv_ref=' . urlencode((string)$tasaRef),
        'persona_id=' . (int)$personaIdPost,
    ];
    if ($periodoSync > 0) { $params[] = 'periodo_sync=' . (int)$periodoSync; }
    header('Location: nomina_vacaciones.php?' . implode('&', $params));
    exit;
}

$flash = nomina_flash_get();
$recentEvents = nomina_vacaciones_fetch_recent_events($conexion, 20);
?>
<!doctype html>
<html lang="es">
<head>
<meta charset="utf-8">
<title>Vacaciones legales</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<style>
body{font-family:Arial,Helvetica,sans-serif;background:#f2f5f9;color:#243b53;margin:0}
.wrap{max-width:1440px;margin:0 auto;padding:24px}
.card{background:#fff;border:1px solid #d9e2ec;border-radius:18px;padding:20px;margin-bottom:18px;box-shadow:0 8px 24px rgba(15,23,42,.05)}
.top{display:flex;justify-content:space-between;gap:14px;align-items:flex-start;flex-wrap:wrap}
.top h1{margin:0 0 4px;font-size:22px}.muted{color:#6b7c93;font-size:14px}.btn{display:inline-block;background:#1f4aa8;color:#fff;text-decoration:none;border:none;border-radius:14px;padding:12px 18px;font-weight:700;cursor:pointer}.btn.secondary{background:#fff;color:#1f4aa8;border:1px solid #b7c6e3}.btn.ghost{background:#eef3ff;color:#1f4aa8}.btn.small{padding:8px 12px;border-radius:12px;font-size:13px}
.filters,.grid{display:grid;gap:14px}.filters{grid-template-columns:1.2fr 1fr 1fr auto auto}.grid{grid-template-columns:1.2fr 1fr}.field label{display:block;font-weight:700;margin-bottom:6px}.field input,.field select,.field textarea{width:100%;box-sizing:border-box;border:1px solid #cbd5e1;border-radius:12px;padding:11px 12px;font-size:15px;background:#fff}.field textarea{min-height:84px}
.badge{display:inline-block;padding:4px 10px;border-radius:999px;background:#eef2ff;color:#1e3a8a;font-weight:700;font-size:12px}.flash{padding:14px 16px;border-radius:14px;margin-bottom:14px}.flash.success{background:#ecfdf3;color:#166534;border:1px solid #86efac}.flash.error{background:#fef2f2;color:#991b1b;border:1px solid #fecaca}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.stat{border:1px solid #d9e2ec;border-radius:14px;padding:14px}.stat .v{font-size:28px;font-weight:800;margin-bottom:6px}.table-wrap{overflow:auto}.table{width:100%;border-collapse:separate;border-spacing:0}.table th,.table td{padding:12px 10px;border-bottom:1px solid #e5edf5;vertical-align:top;text-align:left}.table th{font-size:13px;color:#334e68;background:#f8fafc;position:sticky;top:0}.table tbody tr:hover{background:#fafcff}.mini{font-size:12px;color:#6b7c93}.tot{font-weight:800}.actions{display:flex;gap:10px;flex-wrap:wrap}.subcard{border:1px solid #d9e2ec;border-radius:14px;padding:14px;background:#fbfdff}.note{padding:12px 14px;border-radius:12px;background:#f8fafc;border:1px dashed #cbd5e1;color:#486581}.kpi{font-size:20px;font-weight:800}.warn{color:#92400e}.good{color:#166534}
@media (max-width:1100px){.filters,.grid,.stats{grid-template-columns:1fr}}
</style>
</head>
<body>
<div class="wrap">
  <div class="card top">
    <div>
      <h1>Vacaciones legales</h1>
      <div class="muted">Controla antigüedad, días causados, bono vacacional y registro legal del disfrute. El campo de vacaciones en novedades queda solo como apoyo manual.</div>
    </div>
    <div class="actions">
      <a class="btn secondary" href="novedades_periodo.php<?php echo $periodoSync > 0 ? '?periodo_id='.(int)$periodoSync.'&mode=avanzado' : ''; ?>">Novedades</a>
      <a class="btn secondary" href="index.php">Volver al dashboard</a>
    </div>
  </div>

  <?php if ($flash): ?>
    <div class="flash <?php echo h($flash['type']); ?>"><?php echo h($flash['message']); ?></div>
  <?php endif; ?>

  <div class="card">
    <form method="get" class="filters">
      <div class="field">
        <label>Fecha de corte</label>
        <input type="date" name="fecha_corte" value="<?php echo h($fechaCorte); ?>">
      </div>
      <div class="field">
        <label>Tasa BCV de referencia</label>
        <input type="text" name="tasa_bcv_ref" value="<?php echo h(number_format($tasaRef, 4, '.', '')); ?>">
        <div class="mini">Se usa para salarios referenciados en USD.</div>
      </div>
      <div class="field">
        <label>Período para copiar pago</label>
        <select name="periodo_sync">
          <option value="0">-- Opcional --</option>
          <?php foreach ($periodos as $per): ?>
            <option value="<?php echo (int)$per['id']; ?>" <?php echo $periodoSync === (int)$per['id'] ? 'selected' : ''; ?>><?php echo h($per['codigo']); ?> · <?php echo h($per['estado']); ?></option>
          <?php endforeach; ?>
        </select>
      </div>
      <div class="field">
        <label>&nbsp;</label>
        <button class="btn" type="submit">Actualizar vista</button>
      </div>
      <div class="field">
        <label>&nbsp;</label>
        <a class="btn ghost" href="nomina_vacaciones.php?fecha_corte=<?php echo h(urlencode($fechaCorte)); ?>&periodo_sync=<?php echo (int)$periodoSync; ?>&refresh_bcv=1">Actualizar BCV</a>
      </div>
    </form>
    <div class="note" style="margin-top:14px;">
      <?php if ($bcvLatest): ?>
        BCV disponible: <b><?php echo h(number_format((float)$bcvLatest['rate_value'], 4, ',', '.')); ?></b> · tasa del <b><?php echo h($bcvLatest['rate_date']); ?></b>. <?php echo h($bcvInfo['message'] ?? ''); ?>
      <?php else: ?>
        No se encontró una tasa BCV almacenada. Puedes actualizarla desde esta pantalla o escribir una tasa manual temporal.
      <?php endif; ?>
    </div>
  </div>

  <div class="grid">
    <div class="card">
      <h2 style="margin-top:0;">Saldo legal por trabajador</h2>
      <div class="table-wrap">
        <table class="table">
          <thead>
            <tr>
              <th>Trabajador</th>
              <th>Ingreso</th>
              <th>Años</th>
              <th>Salario ref.</th>
              <th>Día Bs</th>
              <th>Causados</th>
              <th>Usados</th>
              <th>Pend.</th>
              <th>Bono pend.</th>
              <th>Ciclo act.</th>
              <th>Total pend. Bs</th>
              <th></th>
            </tr>
          </thead>
          <tbody>
            <?php foreach ($rows as $row): $p = $row['persona']; $b = $row['balance']; ?>
              <tr>
                <td>
                  <strong><?php echo h(($p['apellido'] ?? '') . ', ' . ($p['nombre'] ?? '')); ?></strong><br>
                  <span class="mini">CI: <?php echo h($p['cedula']); ?> · Cargo: <?php echo h($p['cargo'] ?: 'Sin cargo'); ?></span>
                </td>
                <td><?php echo h($p['fecha_ingreso'] ?: 'N/A'); ?></td>
                <td><?php echo (int)$b['completed_years']; ?></td>
                <td><?php echo h($b['salary_currency']); ?> <?php echo number_format((float)$b['salary_amount'], 2, ',', '.'); ?><br><span class="mini"><?php echo $b['salary_source'] === 'PERSONA' ? 'Ficha' : 'Cargo'; ?></span></td>
                <td><?php echo number_format((float)$b['daily_bs'], 2, ',', '.'); ?></td>
                <td><?php echo number_format((float)$b['total_accrued_days'], 2, ',', '.'); ?></td>
                <td><?php echo number_format((float)$b['used_days'], 2, ',', '.'); ?></td>
                <td><span class="tot"><?php echo number_format((float)$b['pending_days'], 2, ',', '.'); ?></span></td>
                <td><?php echo number_format((float)$b['pending_bonus_days'], 2, ',', '.'); ?></td>
                <td class="tot"><?php echo number_format((float)$b['pending_total_bs'], 2, ',', '.'); ?></td>
                <td><a class="btn small secondary" href="nomina_vacaciones.php?fecha_corte=<?php echo h(urlencode($fechaCorte)); ?>&tasa_bcv_ref=<?php echo h(urlencode((string)$tasaRef)); ?>&periodo_sync=<?php echo (int)$periodoSync; ?>&persona_id=<?php echo (int)$p['id']; ?>#registro">Preparar</a></td>
              </tr>
            <?php endforeach; ?>
          </tbody>
        </table>
      </div>
    </div>

    <div class="card" id="registro">
      <h2 style="margin-top:0;">Registrar vacaciones legales</h2>
      <?php if ($selectedPersona && $selectedBalance): ?>
        <div class="subcard">
          <h2 style="margin-top:0;">Registrar vacaciones legales</h2>
          <div class="muted"><?php echo h(($selectedPersona['apellido'] ?? '') . ', ' . ($selectedPersona['nombre'] ?? '')); ?> · CI <?php echo h($selectedPersona['cedula']); ?> · Cargo: <?php echo h($selectedPersona['cargo'] ?: 'Sin cargo'); ?></div>
          <div class="mini" style="margin-top:4px;">Ingreso: <?php echo h($selectedPersona['fecha_ingreso']); ?> · Ciclo legal actual: <b><?php echo (int)$selectedBalance['current_cycle']; ?></b></div>
          <div class="stats" style="margin-top:12px;">
            <div class="stat"><div class="v"><?php echo number_format((float)$selectedBalance['pending_cycle_days'], 2, ',', '.'); ?></div><div class="mini">Días pendientes del ciclo</div></div>
            <div class="stat"><div class="v"><?php echo number_format((float)$selectedBalance['pending_cycle_bonus_days'], 2, ',', '.'); ?></div><div class="mini">Bono pendiente del ciclo</div></div>
            <div class="stat"><div class="v"><?php echo number_format((float)$selectedBalance['daily_bs'], 2, ',', '.'); ?></div><div class="mini">Salario diario Bs</div></div>
            <div class="stat"><div class="v"><?php echo number_format((float)$selectedBalance['cycle_enjoyment_bs'] + (float)$selectedBalance['cycle_bonus_bs'], 2, ',', '.'); ?></div><div class="mini">Total ciclo pendiente Bs</div></div>
          </div>
          <div class="note" style="margin:12px 0;">Usados históricos: <b><?php echo number_format((float)$selectedBalance['historical_used_days'], 2, ',', '.'); ?></b> días de disfrute y <b><?php echo number_format((float)$selectedBalance['historical_used_bonus_days'], 2, ',', '.'); ?></b> días de bono. Pendiente total acumulado: <b><?php echo number_format((float)$selectedBalance['pending_days'], 2, ',', '.'); ?></b> + <b><?php echo number_format((float)$selectedBalance['pending_bonus_days'], 2, ',', '.'); ?></b>.</div>
          <?php if ((int)$selectedBalance['current_cycle'] > 0 && !empty($selectedCycleUsage[(int)$selectedBalance['current_cycle']])): ?>
            <div class="flash error" style="margin:8px 0;">Este trabajador ya tiene un registro del ciclo <?php echo (int)$selectedBalance['current_cycle']; ?>. Si necesitas ajustar años anteriores, usa el bloque de Ajuste histórico / saldo inicial.</div>
          <?php endif; ?>
          <form method="post">
            <input type="hidden" name="persona_id" value="<?php echo (int)$selectedPersona['id']; ?>">
            <input type="hidden" name="periodo_sync" value="<?php echo (int)$periodoSync; ?>">
            <div class="field" style="margin-bottom:12px;">
              <label>Período para copiar el pago manual de apoyo</label>
              <select name="periodo_sync">
                <option value="0">-- No copiar al período --</option>
                <?php foreach ($periodos as $per): ?>
                  <option value="<?php echo (int)$per['id']; ?>" <?php echo $periodoSync === (int)$per['id'] ? 'selected' : ''; ?>><?php echo h($per['codigo']); ?> · <?php echo h($per['estado']); ?></option>
                <?php endforeach; ?>
              </select>
              <div class="mini">Si eliges un período, el total calculado se copiará al campo Pago manual vacaciones (Bs) como apoyo operativo. La trazabilidad legal quedará guardada en este módulo.</div>
            </div>
            <div class="filters" style="grid-template-columns:1fr 1fr 1fr;">
              <div class="field">
                <label>Fecha del registro</label>
                <input type="date" name="fecha_documento" value="<?php echo h(date('Y-m-d')); ?>">
              </div>
              <div class="field">
                <label>Fecha inicio disfrute</label>
                <input type="date" name="fecha_inicio" value="<?php echo h($fechaCorte); ?>">
              </div>
              <div class="field">
                <label>Fecha fin disfrute</label>
                <input type="date" name="fecha_fin" value="<?php echo h($fechaCorte); ?>">
              </div>
            </div>
            <div class="filters" style="grid-template-columns:1fr 1fr; margin-top:12px;">
              <div class="field">
                <label>Días de disfrute a registrar</label>
                <input type="text" name="dias_disfrute" value="<?php echo h(number_format((float)$selectedBalance['pending_cycle_days'], 2, '.', '')); ?>">
                <div class="mini">Ciclo actual <?php echo (int)$selectedBalance['current_cycle']; ?> · pendiente del ciclo: <?php echo number_format((float)$selectedBalance['pending_cycle_days'], 2, ',', '.'); ?> días.</div>
              </div>
              <div class="field">
                <label>Días de bono vacacional a registrar</label>
                <input type="text" name="dias_bono" value="<?php echo h(number_format((float)$selectedBalance['pending_cycle_bonus_days'], 2, '.', '')); ?>">
                <div class="mini">Bono pendiente del ciclo: <?php echo number_format((float)$selectedBalance['pending_cycle_bonus_days'], 2, ',', '.'); ?> días.</div>
              </div>
            </div>
            <div class="field" style="margin-top:12px;">
              <label>Observación</label>
              <textarea name="observacion" placeholder="Ej: disfrute correspondiente al aniversario <?php echo date('Y', strtotime($fechaCorte)); ?>, pago de bono vacacional, etc."></textarea>
            </div>
            <button class="btn" type="submit" name="registrar_vacaciones">Registrar vacaciones legales</button>
          </form>

          <hr style="margin:18px 0;border:none;border-top:1px solid #e5edf5;">

          <div class="subcard" style="background:#fff7ed;border-color:#fed7aa;">
            <h3 style="margin-top:0;">Ajuste histórico / saldo inicial</h3>
            <div class="mini" style="margin-bottom:10px;">Úsalo para descontar vacaciones ya disfrutadas antes de poner en marcha este módulo. No copia montos al período ni genera pago.</div>
            <form method="post">
              <input type="hidden" name="persona_id" value="<?php echo (int)$selectedPersona['id']; ?>">
              <div class="filters" style="grid-template-columns:1fr 1fr 1fr;">
                <div class="field">
                  <label>Fecha del ajuste</label>
                  <input type="date" name="fecha_documento" value="<?php echo h(date('Y-m-d')); ?>">
                </div>
                <div class="field">
                  <label>Días de disfrute ya usados</label>
                  <input type="text" name="hist_dias_disfrute" value="0">
                </div>
                <div class="field">
                  <label>Días de bono ya usados</label>
                  <input type="text" name="hist_dias_bono" value="0">
                </div>
              </div>
              <div class="field" style="margin-top:12px;">
                <label>Observación del ajuste</label>
                <textarea name="hist_observacion" placeholder="Ej: carga inicial de vacaciones históricas ya disfrutadas antes de abrir el módulo legal"></textarea>
              </div>
              <button class="btn ghost" type="submit" name="registrar_ajuste_historico">Registrar ajuste histórico</button>
            </form>
          </div>
        </div>
      <?php else: ?>
        <div class="note">Selecciona un trabajador desde la tabla para preparar su registro legal de vacaciones.</div>
      <?php endif; ?>
    </div>
  </div>

  <div class="card">
    <h2 style="margin-top:0;">Registros recientes de vacaciones legales</h2>
    <div class="table-wrap">
      <table class="table">
        <thead>
          <tr>
            <th>Fecha</th>
            <th>Trabajador</th>
            <th>Días disfrute</th>
            <th>Días bono</th>
            <th>Monto disfrute Bs</th>
            <th>Monto bono Bs</th>
            <th>Período</th>
            <th>Observación</th>
          </tr>
        </thead>
        <tbody>
          <?php if (!$recentEvents): ?>
            <tr><td colspan="8" class="muted">Aún no hay registros legales de vacaciones.</td></tr>
          <?php else: ?>
            <?php foreach ($recentEvents as $ev): ?>
              <tr>
                <td><?php echo h($ev['fecha_documento']); ?></td>
                <td><strong><?php echo h(($ev['apellido'] ?? '') . ', ' . ($ev['nombre'] ?? '')); ?></strong><br><span class="mini"><?php echo h($ev['cedula'] ?? ''); ?></span></td>
                <td><?php echo number_format((float)$ev['dias_disfrute'], 2, ',', '.'); ?></td>
                <td><?php echo number_format((float)$ev['dias_bono'], 2, ',', '.'); ?></td>
                <td><?php echo number_format((float)$ev['monto_disfrute_bs'], 2, ',', '.'); ?></td>
                <td><?php echo number_format((float)$ev['monto_bono_bs'], 2, ',', '.'); ?></td>
                <td><?php echo $ev['periodo_id'] ? (int)$ev['periodo_id'] : '—'; ?></td>
                <td><?php echo h($ev['observacion'] ?: ''); ?></td>
              </tr>
            <?php endforeach; ?>
          <?php endif; ?>
        </tbody>
      </table>
    </div>
  </div>
</div>
</body>
</html>
