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

function npl_h($s){ return htmlspecialchars((string)$s, ENT_QUOTES, 'UTF-8'); }
function npl_num($n){ return number_format((float)$n, 6, '.', ''); }

$mensaje = '';
$error = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['guardar_parametros'])) {
    mysqli_begin_transaction($conexion);
    try {
        foreach (($_POST['valor_decimal'] ?? []) as $id => $valor) {
            $id = (int)$id;
            if ($id <= 0) { continue; }
            $valor = nomina_normalize_decimal($valor, 0);
            $activo = isset($_POST['activo'][$id]) ? 1 : 0;
            $vigHasta = trim((string)($_POST['vigencia_hasta'][$id] ?? ''));
            $vigHastaSql = $vigHasta === '' ? 'NULL' : "'" . mysqli_real_escape_string($conexion, nomina_date_to_iso($vigHasta)) . "'";
            $sql = "UPDATE nomina_parametros_legales
                    SET valor_decimal = {$valor}, activo = {$activo}, vigencia_hasta = {$vigHastaSql}
                    WHERE id = {$id}";
            if (!mysqli_query($conexion, $sql)) { throw new Exception(mysqli_error($conexion)); }
        }
        nlm_audit($conexion, 'nomina_parametros_legales', null, 'ACTUALIZACION_PARAMETROS', ['cantidad'=>count($_POST['valor_decimal'] ?? [])]);
        mysqli_commit($conexion);
        $mensaje = 'Parámetros legales actualizados correctamente.';
    } catch (Throwable $e) {
        mysqli_rollback($conexion);
        $error = 'No se pudieron guardar los parámetros: ' . $e->getMessage();
    }
}

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['nueva_vigencia'])) {
    $codigo = trim((string)($_POST['codigo'] ?? ''));
    $valor = nomina_normalize_decimal($_POST['nuevo_valor'] ?? 0);
    $desde = nomina_date_to_iso($_POST['vigencia_desde'] ?? '');
    if ($codigo === '' || $desde === '') {
        $error = 'Debes indicar código y fecha de vigencia.';
    } else {
        $codigoSql = mysqli_real_escape_string($conexion, $codigo);
        $res = mysqli_query($conexion, "SELECT * FROM nomina_parametros_legales WHERE codigo='{$codigoSql}' ORDER BY vigencia_desde DESC LIMIT 1");
        $base = $res && mysqli_num_rows($res) ? mysqli_fetch_assoc($res) : null;
        if (!$base) {
            $error = 'No se encontró el parámetro base.';
        } else {
            $nombreSql = mysqli_real_escape_string($conexion, $base['nombre']);
            $catSql = mysqli_real_escape_string($conexion, $base['categoria']);
            $unidadSql = mysqli_real_escape_string($conexion, $base['unidad']);
            $descSql = mysqli_real_escape_string($conexion, (string)$base['descripcion']);
            $desdeSql = mysqli_real_escape_string($conexion, $desde);
            // Compatibilidad total MariaDB/MySQL: no usar "VALUES (...) alias de inserción con actualización automática".
            $resExiste = mysqli_query($conexion, "SELECT id FROM nomina_parametros_legales WHERE codigo='{$codigoSql}' AND vigencia_desde='{$desdeSql}' LIMIT 1");
            if ($resExiste && mysqli_num_rows($resExiste) > 0) {
                $rowExiste = mysqli_fetch_assoc($resExiste);
                $idExiste = (int)($rowExiste['id'] ?? 0);
                $sql = "UPDATE nomina_parametros_legales
                        SET nombre='{$nombreSql}', categoria='{$catSql}', valor_decimal={$valor}, unidad='{$unidadSql}', activo=1, descripcion='{$descSql}'
                        WHERE id={$idExiste} LIMIT 1";
            } else {
                $sql = "INSERT INTO nomina_parametros_legales (codigo, nombre, categoria, valor_decimal, unidad, vigencia_desde, activo, descripcion)
                        VALUES ('{$codigoSql}', '{$nombreSql}', '{$catSql}', {$valor}, '{$unidadSql}', '{$desdeSql}', 1, '{$descSql}')";
            }
            if (mysqli_query($conexion, $sql)) {
                nlm_audit($conexion, 'nomina_parametros_legales', null, 'NUEVA_VIGENCIA', ['codigo'=>$codigo,'vigencia_desde'=>$desde,'valor'=>$valor]);
                $mensaje = 'Nueva vigencia creada/actualizada correctamente.';
            } else {
                $error = 'No se pudo crear la vigencia: ' . mysqli_error($conexion);
            }
        }
    }
}

$rows = [];
$res = mysqli_query($conexion, "SELECT * FROM nomina_parametros_legales ORDER BY categoria, codigo, vigencia_desde DESC, id DESC");
if ($res) { while ($r = mysqli_fetch_assoc($res)) { $rows[] = $r; } }
$porCategoria = [];
foreach ($rows as $r) { $porCategoria[$r['categoria']][] = $r; }
?>
<!doctype html>
<html lang="es">
<head>
<meta charset="utf-8">
<title>Parámetros Legales de Nómina</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;--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:#24364b}.container{max-width:1400px;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;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;padding:16px}.card{padding:16px;margin-top:16px}.title{font-size:20px;font-weight:800}.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:700;text-decoration:none;cursor:pointer}.btn.secondary{background:#fff;color:var(--primary);border-color:rgba(26,60,139,.25)}.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)}.table-wrap{overflow:auto;border:1px solid var(--border);border-radius:14px}.table{width:100%;border-collapse:collapse;min-width:1100px}.table th,.table td{padding:10px 12px;border-bottom:1px solid #eef2f7;font-size:13px;vertical-align:top;text-align:left}.table th{background:#fafafa;font-weight:800}.table input[type=text],.table input[type=date]{width:100%;padding:8px 10px;border:1px solid var(--border);border-radius:10px}.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}.category{font-size:16px;font-weight:800;margin:6px 0 12px}.grid{display:grid;grid-template-columns:2fr 1fr 1fr 1fr auto;gap:10px;align-items:end}@media(max-width:980px){.grid{grid-template-columns:1fr}}label{font-size:12px;font-weight:700;color:#334155;display:block;margin-bottom:6px}select,input{font:inherit}.help{border-left:4px solid var(--primary);background:rgba(26,60,139,.06);padding:14px;border-radius:14px;font-size:13px;margin-bottom:14px}
</style>
</head>
<body>
<div class="container">
  <div class="topbar">
    <div><div class="title">Parámetros Legales de Nómina</div><div class="subtitle">v6.5 · Alícuotas, topes y bases con vigencia. El cálculo congela estos valores dentro de cada corrida.</div></div>
    <div style="display:flex;gap:8px;flex-wrap:wrap"><a class="btn secondary" href="nomina_calcular_actualizado.php">Calcular nómina</a><a class="btn secondary" href="index.php">Inicio</a></div>
  </div>
  <?php if ($mensaje): ?><div class="alert ok"><?php echo npl_h($mensaje); ?></div><?php endif; ?>
  <?php if ($error): ?><div class="alert err"><?php echo npl_h($error); ?></div><?php endif; ?>

  <div class="card">
    <div class="help"><strong>Uso recomendado:</strong> no edites tasas directamente en el código. Cuando una alícuota cambie, crea una nueva vigencia desde la fecha legal correspondiente. Mantén el salario mínimo, riesgo IVSS y base mínima de pensiones revisados antes de calcular una corrida definitiva.</div>
    <form method="post">
      <?php foreach($porCategoria as $cat => $items): ?>
        <div class="category"><?php echo npl_h($cat); ?></div>
        <div class="table-wrap" style="margin-bottom:18px;">
          <table class="table">
            <thead><tr><th>Código</th><th>Nombre</th><th>Valor</th><th>Unidad</th><th>Desde</th><th>Hasta</th><th>Activo</th><th>Descripción</th></tr></thead>
            <tbody>
              <?php foreach($items as $r): $id=(int)$r['id']; ?>
              <tr>
                <td><span class="chip"><?php echo npl_h($r['codigo']); ?></span></td>
                <td><strong><?php echo npl_h($r['nombre']); ?></strong></td>
                <td><input type="text" name="valor_decimal[<?php echo $id; ?>]" value="<?php echo npl_h(npl_num($r['valor_decimal'])); ?>"></td>
                <td><?php echo npl_h($r['unidad']); ?></td>
                <td><?php echo npl_h($r['vigencia_desde']); ?></td>
                <td><input type="date" name="vigencia_hasta[<?php echo $id; ?>]" value="<?php echo npl_h($r['vigencia_hasta']); ?>"></td>
                <td><input type="checkbox" name="activo[<?php echo $id; ?>]" value="1" <?php echo (int)$r['activo']===1?'checked':''; ?>></td>
                <td><span class="muted"><?php echo npl_h($r['descripcion']); ?></span></td>
              </tr>
              <?php endforeach; ?>
            </tbody>
          </table>
        </div>
      <?php endforeach; ?>
      <button class="btn" name="guardar_parametros" value="1" type="submit">Guardar parámetros</button>
    </form>
  </div>

  <div class="card">
    <div class="category">Crear nueva vigencia</div>
    <form method="post" class="grid">
      <div><label>Parámetro</label><select name="codigo" style="width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:12px;background:#fff;"><?php foreach($rows as $r): ?><option value="<?php echo npl_h($r['codigo']); ?>"><?php echo npl_h($r['codigo'].' · '.$r['nombre']); ?></option><?php endforeach; ?></select></div>
      <div><label>Nuevo valor</label><input type="text" name="nuevo_valor" required style="width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:12px;"></div>
      <div><label>Vigencia desde</label><input type="date" name="vigencia_desde" required value="<?php echo date('Y-m-d'); ?>" style="width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:12px;"></div>
      <div><label>&nbsp;</label><span class="muted">Crea una nueva fila sin destruir el histórico.</span></div>
      <div><button class="btn" name="nueva_vigencia" value="1" type="submit">Crear vigencia</button></div>
    </form>
  </div>
</div>
</body>
</html>
