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

nomina_ensure_calendario_laboral_schema($conexion);
$anio = isset($_GET['anio']) ? (int)$_GET['anio'] : (int)date('Y');
if ($anio < 2000 || $anio > 2100) { $anio = (int)date('Y'); }
$mensaje = '';
$error = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $action = (string)($_POST['action'] ?? '');
    if ($action === 'seed') {
        $anioPost = (int)($_POST['anio'] ?? $anio);
        if (nomina_seed_calendario_venezuela($conexion, $anioPost)) {
            $mensaje = 'Calendario Venezuela ' . $anioPost . ' precargado/actualizado correctamente.';
            $anio = $anioPost;
        } else {
            $error = 'No se pudo precargar el calendario.';
        }
    }
    if ($action === 'save') {
        $id = (int)($_POST['id'] ?? 0);
        $fecha = nomina_date_to_iso($_POST['fecha'] ?? '');
        $nombre = trim((string)($_POST['nombre'] ?? ''));
        $tipo = strtoupper(trim((string)($_POST['tipo'] ?? 'MANUAL')));
        $aplicaNomina = isset($_POST['aplica_nomina']) ? 1 : 0;
        $aplicaBanco = isset($_POST['aplica_banco']) ? 1 : 0;
        $fuente = trim((string)($_POST['fuente'] ?? ''));
        $baseLegal = trim((string)($_POST['base_legal'] ?? ''));
        $observacion = trim((string)($_POST['observacion'] ?? ''));
        $activo = isset($_POST['activo']) ? 1 : 0;
        if ($fecha === '' || $nombre === '') {
            $error = 'Debes indicar fecha y nombre del feriado.';
        } else {
            if ($id > 0) {
                $fechaSql = mysqli_real_escape_string($conexion, $fecha);
                $nombreSql = mysqli_real_escape_string($conexion, $nombre);
                $tipoSql = mysqli_real_escape_string($conexion, $tipo);
                $fuenteSql = mysqli_real_escape_string($conexion, $fuente);
                $baseLegalSql = mysqli_real_escape_string($conexion, $baseLegal);
                $observacionSql = mysqli_real_escape_string($conexion, $observacion);
                $anioRow = (int)substr($fecha, 0, 4);
                $sql = "UPDATE nomina_calendario_laboral
                        SET fecha='{$fechaSql}', anio={$anioRow}, nombre='{$nombreSql}', tipo='{$tipoSql}', aplica_nomina={$aplicaNomina}, aplica_banco={$aplicaBanco},
                            fuente=" . ($fuenteSql === '' ? 'NULL' : "'{$fuenteSql}'") . ",
                            base_legal=" . ($baseLegalSql === '' ? 'NULL' : "'{$baseLegalSql}'") . ",
                            observacion=" . ($observacionSql === '' ? 'NULL' : "'{$observacionSql}'") . ",
                            activo={$activo}
                        WHERE id={$id}";
                if (mysqli_query($conexion, $sql)) { $mensaje = 'Feriado actualizado correctamente.'; $anio = $anioRow; }
                else { $error = 'No se pudo actualizar: ' . mysqli_error($conexion); }
            } else {
                $ok = nomina_calendario_insert_or_update($conexion, [
                    'fecha'=>$fecha,
                    'nombre'=>$nombre,
                    'tipo'=>$tipo,
                    'aplica_nomina'=>$aplicaNomina,
                    'aplica_banco'=>$aplicaBanco,
                    'fuente'=>$fuente,
                    'base_legal'=>$baseLegal,
                    'observacion'=>$observacion,
                    'activo'=>$activo,
                ]);
                if ($ok) { $mensaje = 'Feriado creado/actualizado correctamente.'; $anio = (int)substr($fecha, 0, 4); }
                else { $error = 'No se pudo guardar: ' . mysqli_error($conexion); }
            }
        }
    }
    if ($action === 'toggle') {
        $id = (int)($_POST['id'] ?? 0);
        if ($id > 0) {
            $res = mysqli_query($conexion, "SELECT activo, anio FROM nomina_calendario_laboral WHERE id={$id} LIMIT 1");
            $row = $res ? mysqli_fetch_assoc($res) : null;
            if ($row) {
                $new = (int)$row['activo'] === 1 ? 0 : 1;
                $anio = (int)$row['anio'];
                if (mysqli_query($conexion, "UPDATE nomina_calendario_laboral SET activo={$new} WHERE id={$id}")) { $mensaje = $new ? 'Feriado reactivado.' : 'Feriado archivado.'; }
                else { $error = 'No se pudo cambiar el estado: ' . mysqli_error($conexion); }
            }
        }
    }
}

// Asegura precarga al entrar para el año consultado.
nomina_seed_calendario_venezuela($conexion, $anio);

$edit = null;
if (isset($_GET['edit'])) {
    $editId = (int)$_GET['edit'];
    $resEdit = mysqli_query($conexion, "SELECT * FROM nomina_calendario_laboral WHERE id={$editId} LIMIT 1");
    if ($resEdit && mysqli_num_rows($resEdit)) { $edit = mysqli_fetch_assoc($resEdit); $anio = (int)$edit['anio']; }
}

$rows = [];
$res = mysqli_query($conexion, "SELECT * FROM nomina_calendario_laboral WHERE anio={$anio} ORDER BY fecha ASC, aplica_nomina DESC, tipo ASC, nombre ASC");
if ($res) { while ($r = mysqli_fetch_assoc($res)) { $rows[] = $r; } }
$totalNomina = 0; $totalBanco = 0; $totalActivos = 0;
foreach ($rows as $r) { if ((int)$r['activo'] === 1) { $totalActivos++; if ((int)$r['aplica_nomina'] === 1) $totalNomina++; if ((int)$r['aplica_banco'] === 1) $totalBanco++; } }
function ncal_h($s) { return htmlspecialchars((string)$s, ENT_QUOTES, 'UTF-8'); }
?>
<!doctype html>
<html lang="es">
<head>
<meta charset="utf-8">
<title>Calendario Laboral Venezuela</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
<style>
:root{--primary:#1a3c8b;--bg:#f5f7fa;--card:#fff;--border:#e5e7eb;--muted:#6b7280;--ok:#166534;--danger:#be123c;--warn:#92400e;--shadow:0 8px 24px rgba(16,24,40,.08);--radius:16px}*{box-sizing:border-box}body{margin:0;font-family:'Inter',sans-serif;background:var(--bg);color:#1f2937}.container{max-width:1500px;margin:24px auto;padding:0 16px}.topbar,.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}.topbar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:18px}.title{font-size:24px;font-weight:800;color:#18304f}.subtitle,.muted{font-size:12px;color:var(--muted)}.btn{display:inline-flex;align-items:center;justify-content:center;padding:10px 14px;border-radius:12px;border:1px solid transparent;background:var(--primary);color:#fff;font-weight:800;text-decoration:none;cursor:pointer}.btn.secondary{background:#fff;color:var(--primary);border-color:rgba(26,60,139,.25)}.btn.warn{background:#fff8ed;color:var(--warn);border-color:#fed7aa}.card{padding:18px;margin-top:16px}.alert{padding:12px 14px;border-radius:12px;margin-top:12px;border:1px solid}.alert.ok{background:rgba(22,101,52,.08);border-color:rgba(22,101,52,.22);color:var(--ok)}.alert.err{background:rgba(190,18,60,.08);border-color:rgba(190,18,60,.22);color:var(--danger)}.alert.info{background:rgba(26,60,139,.06);border-color:rgba(26,60,139,.16);color:#1e3a8a}.grid{display:grid;grid-template-columns:1fr 1fr 1fr 1fr;gap:12px}.grid2{display:grid;grid-template-columns:1fr 1fr 1fr auto;gap:12px;align-items:end}@media(max-width:980px){.grid,.grid2{grid-template-columns:1fr}}label{font-size:12px;font-weight:800;color:#334155;display:block;margin-bottom:6px}input,select,textarea{width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:12px;font:inherit;background:#fff}textarea{min-height:76px}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.stat{border:1px solid var(--border);border-radius:14px;padding:14px;background:#fafafa}.stat b{font-size:22px;color:#18304f}.table-wrap{overflow:auto;border:1px solid var(--border);border-radius:14px}.table{width:100%;min-width:1180px;border-collapse:collapse}.table th,.table td{padding:10px 12px;border-bottom:1px solid #eef2f7;text-align:left;vertical-align:top;font-size:13px}.table th{background:#fafafa;font-weight:800;color:#334155}.chip{display:inline-flex;padding:4px 8px;border-radius:999px;background:rgba(26,60,139,.09);color:var(--primary);font-size:11px;font-weight:800}.chip.off{background:#f3f4f6;color:#6b7280}.tag{font-size:11px;border-radius:999px;padding:4px 7px;font-weight:800;display:inline-flex;margin:2px}.tag.n{background:#e0f2fe;color:#075985}.tag.b{background:#fef3c7;color:#92400e}.tag.off{background:#f3f4f6;color:#6b7280}.help{border-left:4px solid #f59e0b;background:#fff7ed;padding:14px;border-radius:14px;font-size:13px}.actions{display:flex;gap:8px;flex-wrap:wrap}.smallform{display:inline}.yearbar{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.yearbar a{padding:8px 12px;border-radius:999px;background:#fff;border:1px solid var(--border);text-decoration:none;color:#1e3a8a;font-weight:800}.yearbar a.active{background:#1a3c8b;color:#fff}
</style>
</head>
<body>
<div class="container">
  <div class="topbar">
    <div>
      <div class="title">Calendario Laboral Venezuela</div>
      <div class="subtitle">Feriados laborales nacionales, domingos LOTTT, feriados bancarios referenciales y eventos regionales/manuales para el modo calendario de nómina.</div>
    </div>
    <div class="actions">
      <a class="btn secondary" href="nomina_calcular_actualizado.php?origen_cantidades=CALENDARIO">Calcular nómina</a>
      <a class="btn secondary" href="index.php">Inicio</a>
    </div>
  </div>
  <?php if ($mensaje): ?><div class="alert ok"><?php echo ncal_h($mensaje); ?></div><?php endif; ?>
  <?php if ($error): ?><div class="alert err"><?php echo ncal_h($error); ?></div><?php endif; ?>

  <div class="card">
    <div class="help">
      <b>Criterio auditor:</b> la LOTTT art. 184 reconoce domingos, Carnaval, Semana Santa, 1 de mayo, 24/25/31 de diciembre y fiestas nacionales como feriados laborales. Los feriados bancarios se cargan como referencia y no afectan nómina salvo que RRHH marque <b>Aplica nómina</b>. Los decretos estadales/municipales deben registrarse manualmente con soporte.
    </div>
    <div class="stats" style="margin-top:14px;">
      <div class="stat"><b><?php echo (int)$totalActivos; ?></b><div class="muted">Eventos activos <?php echo (int)$anio; ?></div></div>
      <div class="stat"><b><?php echo (int)$totalNomina; ?></b><div class="muted">Aplican a nómina</div></div>
      <div class="stat"><b><?php echo (int)$totalBanco; ?></b><div class="muted">Referencias bancarias</div></div>
      <div class="stat"><b>52</b><div class="muted">Domingos calculados automáticamente</div></div>
    </div>
    <div class="yearbar" style="margin-top:14px;">
      <?php for ($y=$anio-2; $y<=$anio+2; $y++): ?><a class="<?php echo $y===$anio?'active':''; ?>" href="?anio=<?php echo $y; ?>"><?php echo $y; ?></a><?php endfor; ?>
      <form method="post" class="smallform"><input type="hidden" name="action" value="seed"><input type="hidden" name="anio" value="<?php echo (int)$anio; ?>"><button class="btn" type="submit">Precargar/actualizar <?php echo (int)$anio; ?></button></form>
    </div>
  </div>

  <div class="card">
    <h2 style="margin:0 0 12px 0;font-size:18px;">Agregar / editar feriado</h2>
    <form method="post">
      <input type="hidden" name="action" value="save">
      <input type="hidden" name="id" value="<?php echo $edit ? (int)$edit['id'] : 0; ?>">
      <div class="grid">
        <div><label>Fecha</label><input type="date" name="fecha" required value="<?php echo ncal_h($edit['fecha'] ?? ($anio . '-01-01')); ?>"></div>
        <div><label>Nombre</label><input name="nombre" required value="<?php echo ncal_h($edit['nombre'] ?? ''); ?>" placeholder="Ej: Feriado municipal decretado"></div>
        <div><label>Tipo</label><select name="tipo"><option>NACIONAL</option><option>FIESTA_NACIONAL</option><option>RELIGIOSO_MOVIL</option><option>REGIONAL</option><option>MUNICIPAL</option><option>BANCARIO_REFERENCIAL</option><option>MANUAL</option></select></div>
        <div><label>Fuente</label><input name="fuente" value="<?php echo ncal_h($edit['fuente'] ?? ''); ?>" placeholder="Gaceta, decreto, RRHH, BCV/SUDEBAN"></div>
      </div>
      <div class="grid" style="margin-top:12px;">
        <div><label>Base legal</label><input name="base_legal" value="<?php echo ncal_h($edit['base_legal'] ?? ''); ?>" placeholder="LOTTT art. 184 / Decreto municipal..."></div>
        <div><label>Observación</label><textarea name="observacion" placeholder="Soporte, alcance, municipio/estado, criterio RRHH..."><?php echo ncal_h($edit['observacion'] ?? ''); ?></textarea></div>
        <div style="display:flex;gap:14px;align-items:center;flex-wrap:wrap;padding-top:22px;">
          <label style="display:flex;gap:8px;align-items:center;margin:0;"><input style="width:auto;" type="checkbox" name="aplica_nomina" value="1" <?php echo !$edit || (int)$edit['aplica_nomina']===1?'checked':''; ?>> Aplica nómina</label>
          <label style="display:flex;gap:8px;align-items:center;margin:0;"><input style="width:auto;" type="checkbox" name="aplica_banco" value="1" <?php echo $edit && (int)$edit['aplica_banco']===1?'checked':''; ?>> Aplica banco</label>
          <label style="display:flex;gap:8px;align-items:center;margin:0;"><input style="width:auto;" type="checkbox" name="activo" value="1" <?php echo !$edit || (int)$edit['activo']===1?'checked':''; ?>> Activo</label>
        </div>
        <div style="display:flex;align-items:end;"><button class="btn" type="submit"><?php echo $edit ? 'Actualizar' : 'Guardar'; ?></button></div>
      </div>
    </form>
  </div>

  <div class="card">
    <h2 style="margin:0 0 12px 0;font-size:18px;">Feriados configurados <?php echo (int)$anio; ?></h2>
    <div class="table-wrap">
      <table class="table">
        <thead><tr><th>Fecha</th><th>Nombre</th><th>Tipo</th><th>Aplica</th><th>Base / fuente</th><th>Observación</th><th>Estado</th><th>Acciones</th></tr></thead>
        <tbody>
          <?php foreach ($rows as $r): ?>
          <tr>
            <td><b><?php echo ncal_h(date('d/m/Y', strtotime($r['fecha']))); ?></b><br><span class="muted"><?php echo ncal_h(strftime('%A', strtotime($r['fecha']))); ?></span></td>
            <td><strong><?php echo ncal_h($r['nombre']); ?></strong></td>
            <td><span class="chip"><?php echo ncal_h($r['tipo']); ?></span></td>
            <td>
              <?php if ((int)$r['aplica_nomina'] === 1): ?><span class="tag n">Nómina</span><?php else: ?><span class="tag off">No nómina</span><?php endif; ?>
              <?php if ((int)$r['aplica_banco'] === 1): ?><span class="tag b">Banco</span><?php endif; ?>
            </td>
            <td><span class="muted"><b><?php echo ncal_h($r['base_legal']); ?></b><br><?php echo ncal_h($r['fuente']); ?></span></td>
            <td><span class="muted"><?php echo ncal_h($r['observacion']); ?></span></td>
            <td><?php echo (int)$r['activo']===1 ? '<span class="tag n">Activo</span>' : '<span class="tag off">Archivado</span>'; ?></td>
            <td>
              <div class="actions">
                <a class="btn secondary" href="?anio=<?php echo (int)$anio; ?>&edit=<?php echo (int)$r['id']; ?>">Editar</a>
                <form method="post" class="smallform"><input type="hidden" name="action" value="toggle"><input type="hidden" name="id" value="<?php echo (int)$r['id']; ?>"><button class="btn warn" type="submit"><?php echo (int)$r['activo']===1?'Archivar':'Reactivar'; ?></button></form>
              </div>
            </td>
          </tr>
          <?php endforeach; ?>
        </tbody>
      </table>
    </div>
  </div>
</div>
</body>
</html>
