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

$corrida_id = isset($_REQUEST['corrida_id']) ? (int)$_REQUEST['corrida_id'] : 0;
$flash = function_exists('nomina_flash_get') ? nomina_flash_get() : null;
$errors = [];

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['registrar_ajuste'])) {
    $corridaPost = (int)($_POST['corrida_id'] ?? 0);
    $tipo = strtoupper(trim((string)($_POST['tipo'] ?? 'AJUSTE')));
    $personaId = (int)($_POST['persona_id'] ?? 0);
    $conceptoId = (int)($_POST['concepto_id'] ?? 0);
    $monto = (float)str_replace(',', '.', trim((string)($_POST['monto'] ?? '0')));
    $cantidadRaw = trim((string)($_POST['cantidad'] ?? ''));
    $cantidad = $cantidadRaw === '' ? null : (float)str_replace(',', '.', $cantidadRaw);
    $motivo = trim((string)($_POST['motivo'] ?? ''));
    $referencia = trim((string)($_POST['referencia'] ?? ''));
    $res = function_exists('nlm_registrar_ajuste_reverso')
        ? nlm_registrar_ajuste_reverso($conexion, $corridaPost, $tipo, $personaId, $conceptoId, $monto, $cantidad, $motivo, $referencia)
        : ['ok'=>false, 'message'=>'Motor legal master no disponible.'];
    if ($res['ok'] ?? false) {
        if (function_exists('nomina_flash_set')) { nomina_flash_set('success', $res['message'] ?? 'Registro creado.'); }
        header('Location: nomina_reversos_ajustes.php?corrida_id=' . $corridaPost);
        exit;
    }
    $errors[] = $res['message'] ?? 'No se pudo registrar el ajuste/reverso.';
}

$corridas = nr_latest_corridas($conexion, 40);
$info = $corrida_id ? nr_corrida_info($conexion, $corrida_id) : null;
$workers = $corrida_id ? nr_workers_for_corrida($conexion, $corrida_id) : [];
$ajustes = ($corrida_id && function_exists('nlm_corrida_ajustes')) ? nlm_corrida_ajustes($conexion, $corrida_id) : [];
$conceptos = [];
$resC = mysqli_query($conexion, "SELECT id, codigo, nombre, tipo FROM conceptos_nomina WHERE activo = 1 ORDER BY tipo, codigo");
if ($resC) { while ($c = mysqli_fetch_assoc($resC)) { $conceptos[] = $c; } }

function nra_h($s){ return htmlspecialchars((string)$s, ENT_QUOTES, 'UTF-8'); }
function nra_money($n){ return number_format((float)$n, 2, ',', '.'); }
?>
<!doctype html>
<html lang="es">
<head>
<meta charset="utf-8">
<title>Reversos y ajustes 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;--text:#24364b;--muted:#6b7280;--shadow:0 8px 24px rgba(16,24,40,.08);--radius:16px;--ok:#166534;--danger:#be123c;--warn:#b45309}*{box-sizing:border-box}body{margin:0;font-family:'Inter',sans-serif;background:var(--bg);color:var(--text)}a{color:var(--primary);text-decoration:none}.container{max-width:1200px;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{padding:16px;display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}.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;gap:8px;padding:10px 14px;border-radius:12px;border:1px solid transparent;background:var(--primary);color:#fff;font-weight:700;cursor:pointer}.btn.secondary{background:#fff;color:var(--primary);border-color:rgba(26,60,139,.25)}.grid{display:grid;grid-template-columns:repeat(12,1fr);gap:12px}.col-3{grid-column:span 3}.col-4{grid-column:span 4}.col-6{grid-column:span 6}.col-12{grid-column:span 12}@media(max-width:960px){.col-3,.col-4,.col-6{grid-column:span 12}}label{display:block;font-size:12px;font-weight:700;margin:0 0 6px 2px;color:#334155}select,input,textarea{width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:12px;background:#fff;font:inherit}textarea{min-height:78px;resize:vertical}.table-wrap{overflow:auto;border:1px solid var(--border);border-radius:14px;margin-top:12px}.table{width:100%;border-collapse:collapse;min-width:900px}.table th,.table td{padding:10px 12px;border-bottom:1px solid #eef2f7;font-size:13px;text-align:left;vertical-align:top}.table th{background:#fafafa;font-weight:800}.alert{padding:12px 14px;border-radius:12px;margin-top:12px;border:1px solid}.alert.success{background:rgba(22,101,52,.08);border-color:rgba(22,101,52,.22);color:var(--ok)}.alert.error{background:rgba(190,18,60,.08);border-color:rgba(190,18,60,.22);color:var(--danger)}.helper{border-left:4px solid var(--primary);background:rgba(26,60,139,.06);padding:14px;border-radius:14px;font-size:13px}.chip{display:inline-flex;padding:4px 8px;border-radius:999px;font-size:11px;font-weight:800;background:rgba(26,60,139,.10);color:var(--primary)}.chip.warn{background:rgba(180,83,9,.10);color:var(--warn)}.chip.ok{background:rgba(22,101,52,.10);color:var(--ok)}
</style>
</head>
<body>
<div class="container">
  <div class="topbar">
    <div>
      <div class="title">Reversos y ajustes de nómina</div>
      <div class="subtitle">Registra incidencias posteriores sin modificar la corrida original. Sirve como bitácora formal para nóminas complementarias o reversos.</div>
    </div>
    <div style="display:flex;gap:8px;flex-wrap:wrap;">
      <?php if ($corrida_id): ?><a class="btn secondary" href="nomina_corrida_resumen.php?corrida_id=<?php echo (int)$corrida_id; ?>">Resumen</a><?php endif; ?>
      <a class="btn secondary" href="nomina_calcular_actualizado.php">Cálculo</a>
      <a class="btn secondary" href="index.php">Inicio</a>
    </div>
  </div>

  <?php if ($flash): ?><div class="alert <?php echo nra_h($flash['type']); ?>"><?php echo nra_h($flash['message']); ?></div><?php endif; ?>
  <?php if ($errors): ?><div class="alert error"><strong>Revisa:</strong><ul><?php foreach($errors as $e): ?><li><?php echo nra_h($e); ?></li><?php endforeach; ?></ul></div><?php endif; ?>

  <div class="card">
    <form method="get" class="grid" style="align-items:end;">
      <div class="col-6">
        <label>Corrida a revisar</label>
        <select name="corrida_id" onchange="this.form.submit()">
          <option value="0">-- Seleccionar corrida --</option>
          <?php foreach($corridas as $c): ?>
            <option value="<?php echo (int)$c['id']; ?>" <?php echo $corrida_id === (int)$c['id'] ? 'selected' : ''; ?>>#<?php echo (int)$c['id']; ?> · <?php echo nra_h($c['periodo_codigo']); ?> · <?php echo nra_h($c['estado']); ?> · Neto Bs <?php echo nra_money($c['total_neto']); ?></option>
          <?php endforeach; ?>
        </select>
      </div>
      <div class="col-3"><label>&nbsp;</label><button class="btn" type="submit">Abrir</button></div>
    </form>
  </div>

  <?php if ($info): ?>
    <div class="card">
      <div class="helper"><strong>Regla de blindaje:</strong> esta pantalla no edita movimientos originales. El registro queda separado en <code>nomina_corrida_ajustes</code> con usuario, fecha, IP, motivo y referencia. Para que un ajuste impacte pago debe generarse luego una nómina complementaria o recibo de ajuste.<br><br><strong>Prueba recomendada:</strong> registra un AJUSTE pequeño con referencia “Prueba controlada” y verifica en la Hoja de Auditoría que aparece sin cambiar el neto original de la corrida.</div>
      <div style="margin-top:12px;display:flex;gap:8px;flex-wrap:wrap;align-items:center;">
        <span class="chip">Corrida #<?php echo (int)$info['id']; ?></span>
        <span class="chip <?php echo in_array($info['estado'], ['PAGADA','CERRADA'], true) ? 'ok' : 'warn'; ?>">Estado: <?php echo nra_h($info['estado']); ?></span>
        <span class="muted">Período <?php echo nra_h($info['periodo_codigo']); ?> · <?php echo nra_h($info['fecha_desde']); ?> a <?php echo nra_h($info['fecha_hasta']); ?></span>
      </div>
    </div>

    <div class="card">
      <div class="title" style="font-size:16px;">Registrar ajuste/reverso formal</div>
      <form method="post" class="grid" style="margin-top:12px;align-items:end;">
        <input type="hidden" name="corrida_id" value="<?php echo (int)$corrida_id; ?>">
        <div class="col-3">
          <label>Tipo</label>
          <select name="tipo" required>
            <option value="AJUSTE">Ajuste</option>
            <option value="REVERSO">Reverso / incidencia de anulación</option>
          </select>
        </div>
        <div class="col-3">
          <label>Trabajador</label>
          <select name="persona_id">
            <option value="0">General de la corrida</option>
            <?php foreach($workers as $w): ?>
              <option value="<?php echo (int)$w['persona_id']; ?>"><?php echo nra_h(trim($w['apellido'].' '.$w['nombre']).' · '.$w['cedula']); ?></option>
            <?php endforeach; ?>
          </select>
        </div>
        <div class="col-3">
          <label>Concepto relacionado</label>
          <select name="concepto_id">
            <option value="0">Sin concepto específico</option>
            <?php foreach($conceptos as $c): ?>
              <option value="<?php echo (int)$c['id']; ?>"><?php echo nra_h($c['codigo'].' · '.$c['nombre']); ?></option>
            <?php endforeach; ?>
          </select>
        </div>
        <div class="col-3">
          <label>Monto Bs</label>
          <input name="monto" inputmode="decimal" value="0.00" required>
          <div class="muted">Usa negativo para descuento/devolución.</div>
        </div>
        <div class="col-3"><label>Cantidad/horas/días</label><input name="cantidad" inputmode="decimal" placeholder="Opcional"></div>
        <div class="col-3"><label>Referencia</label><input name="referencia" placeholder="Ej: soporte, memo, transferencia"></div>
        <div class="col-6"><label>Motivo obligatorio</label><textarea name="motivo" minlength="10" required placeholder="Describe motivo, fecha, responsable y soporte. Ej: corrección autorizada por RRHH el 15/05/2026 según memo interno; diferencia detectada posterior al cierre; reverso por pago improcedente..."></textarea></div>
        <div class="col-12"><button class="btn" name="registrar_ajuste" value="1" type="submit" onclick="return confirm('¿Confirmas registrar esta incidencia sin modificar la corrida original?');">Registrar incidencia</button></div>
      </form>
    </div>

    <div class="card">
      <div class="title" style="font-size:16px;">Historial de ajustes/reversos</div>
      <div class="table-wrap">
        <table class="table">
          <thead><tr><th>Fecha</th><th>Tipo</th><th>Trabajador</th><th>Concepto</th><th>Monto</th><th>Motivo</th><th>Usuario</th></tr></thead>
          <tbody>
          <?php if ($ajustes): foreach($ajustes as $a): ?>
            <tr>
              <td><?php echo nra_h($a['created_at']); ?></td>
              <td><?php echo nra_h($a['tipo']); ?></td>
              <td><?php echo nra_h(trim(($a['apellido'] ?? '').' '.($a['nombre'] ?? '')).' '.($a['cedula'] ?? '')); ?></td>
              <td><?php echo nra_h(trim(($a['codigo'] ?? '').' '.($a['concepto_nombre'] ?? ''))); ?></td>
              <td><?php echo nra_money($a['monto']); ?></td>
              <td><?php echo nra_h($a['motivo']); ?><?php if (!empty($a['referencia'])): ?><div class="muted">Ref: <?php echo nra_h($a['referencia']); ?></div><?php endif; ?></td>
              <td><?php echo nra_h($a['usuario']); ?></td>
            </tr>
          <?php endforeach; else: ?>
            <tr><td colspan="7">No hay ajustes/reversos registrados para esta corrida.</td></tr>
          <?php endif; ?>
          </tbody>
        </table>
      </div>
    </div>
  <?php endif; ?>
</div>
</body>
</html>
