<?php
require_once __DIR__ . '/../../config/auth.php';

$periodo = limpiar($_GET['periodo'] ?? $_POST['periodo'] ?? '');
if (!preg_match('/^\d{4}-(0[1-9]|1[0-2])$/', $periodo)) {
    http_response_code(400);
    exit('Periodo inválido.');
}

$stmtEstado = $conn->prepare(
    "SELECT COUNT(*) total, SUM(estado='Cerrado') cerradas FROM nominas WHERE periodo=?"
);
$stmtEstado->bind_param('s', $periodo);
$stmtEstado->execute();
$estadoPeriodo = $stmtEstado->get_result()->fetch_assoc();
$stmtEstado->close();
if (!(int) $estadoPeriodo['total']) {
    http_response_code(404);
    exit('La Planilla de Salarios no existe.');
}
$cerrada = (int) $estadoPeriodo['cerradas'] === (int) $estadoPeriodo['total'];

if (!$cerrada) {
    $colaboradoresPlanilla = $conn->prepare(
        'SELECT DISTINCT colaborador_id FROM nominas WHERE periodo=?'
    );
    $colaboradoresPlanilla->bind_param('s', $periodo);
    $colaboradoresPlanilla->execute();
    $resultadoColaboradores = $colaboradoresPlanilla->get_result();
    while ($filaColaborador = $resultadoColaboradores->fetch_assoc()) {
        sincronizar_planillas_abiertas_colaborador(
            $conn,
            (int) $filaColaborador['colaborador_id']
        );
    }
    $colaboradoresPlanilla->close();
}

if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['accion'] ?? '') === 'guardar') {
    if ($cerrada) {
        $_SESSION['flash_mensaje'] = 'La Planilla de Salarios está cerrada y no admite modificaciones.';
        $_SESSION['flash_tipo'] = 'warning';
    } else {
        $salarios = $_POST['salario_base'] ?? [];
        $actualizar = $conn->prepare(
            "UPDATE nominas
             SET salario_base=?, horas_extra=0, bonificaciones=0,
                 total_neto=?+adicionales-descuentos
             WHERE id=? AND periodo=? AND estado<>'Cerrado'"
        );
        foreach ($salarios as $id => $salario) {
            $id = (int) $id;
            $salario = max(0, numero_entero($salario));
            $actualizar->bind_param('ddis', $salario, $salario, $id, $periodo);
            $actualizar->execute();
        }
        $actualizar->close();
        registrar_auditoria($conn, 'UPDATE', 'nominas', null, 'Actualización de Planilla de Salarios ' . $periodo);
        $_SESSION['flash_mensaje'] = 'Planilla de Salarios actualizada correctamente.';
        $_SESSION['flash_tipo'] = 'success';
    }
    header('Location: /HM/modules/nomina/periodo.php?periodo=' . urlencode($periodo));
    exit;
}

$mensaje = $_SESSION['flash_mensaje'] ?? '';
$tipoMensaje = $_SESSION['flash_tipo'] ?? 'success';
unset($_SESSION['flash_mensaje'], $_SESSION['flash_tipo']);

$stmt = $conn->prepare(
    "SELECT n.*, CONCAT(c.apellidos, ', ', c.nombres) colaborador, c.documento,
            (SELECT GROUP_CONCAT(CONCAT(nd.concepto, ': Gs. ', FORMAT(nd.monto,0,'es_PY')) SEPARATOR ' | ')
             FROM nomina_descuentos nd WHERE nd.nomina_id=n.id) detalle_descuentos,
            (SELECT GROUP_CONCAT(CONCAT(na.concepto, ': Gs. ', FORMAT(na.monto,0,'es_PY')) SEPARATOR ' | ')
             FROM nomina_adicionales na WHERE na.nomina_id=n.id) detalle_adicionales
     FROM nominas n
     JOIN colaboradores c ON c.id=n.colaborador_id
     WHERE n.periodo=?
     ORDER BY c.apellidos,c.nombres"
);
$stmt->bind_param('s', $periodo);
$stmt->execute();
$nominas = $stmt->get_result();

include __DIR__ . '/../../includes/header.php';
include __DIR__ . '/../../includes/sidebar.php';
?>
<main class="main">
  <?php include __DIR__ . '/../../includes/topbar.php'; ?>
  <div class="content">
    <a class="text-decoration-none no-print" href="/HM/modules/nomina/index.php"><i class="fa fa-arrow-left me-1"></i> Volver a Planillas de Salarios</a>
    <div class="d-flex flex-wrap justify-content-between align-items-center gap-3 mt-2 mb-4">
      <div>
        <h3 class="page-title mb-1">Planilla de Salarios <?= e($periodo) ?></h3>
        <span class="badge <?= $cerrada ? 'bg-dark' : 'bg-success' ?>"><?= $cerrada ? 'Cerrada — histórico' : 'Abierta' ?></span>
      </div>
      <?php if (!$cerrada): ?>
        <form class="no-print" method="post" action="/HM/modules/nomina/cerrar.php" onsubmit="return confirm('¿Cerrar definitivamente la Planilla de Salarios <?= e($periodo) ?>? Esta acción bloqueará toda edición.');">
          <input type="hidden" name="periodo" value="<?= e($periodo) ?>">
          <button class="btn btn-danger" type="submit"><i class="fa fa-lock me-1"></i> Cerrar Planilla de Salarios</button>
        </form>
      <?php endif; ?>
    </div>
    <?php if ($mensaje): ?><div class="alert alert-<?= e($tipoMensaje) ?>"><?= e($mensaje) ?></div><?php endif; ?>
    <form method="post">
      <input type="hidden" name="periodo" value="<?= e($periodo) ?>">
      <input type="hidden" name="accion" value="guardar">
      <div class="card card-hm">
        <div class="card-body">
          <div class="table-responsive">
            <table class="table align-middle mb-0">
              <thead><tr><th>Colaborador</th><th>Salario</th><th>Adicionales</th><th>Detalle adicionales</th><th>Descuentos</th><th>Detalle descuentos</th><th>Neto</th></tr></thead>
              <tbody>
              <?php $total = 0; while ($fila = $nominas->fetch_assoc()): $total += (float) $fila['total_neto']; ?>
                <tr>
                  <td><strong><?= e($fila['colaborador']) ?></strong><br><small class="text-muted"><?= e($fila['documento']) ?></small></td>
                  <td><input class="form-control form-control-sm numero-miles" type="text" inputmode="numeric" name="salario_base[<?= (int) $fila['id'] ?>]" value="<?= e(numero_py($fila['salario_base'])) ?>" <?= $cerrada ? 'disabled' : '' ?>></td>
                  <td>Gs. <?= number_format((float) $fila['adicionales'], 0, ',', '.') ?></td>
                  <td><small><?= e($fila['detalle_adicionales'] ?: 'Sin adicionales') ?></small></td>
                  <td>Gs. <?= number_format((float) $fila['descuentos'], 0, ',', '.') ?></td>
                  <td><small><?= e($fila['detalle_descuentos'] ?: 'Sin descuentos') ?></small></td>
                  <td><strong>Gs. <?= number_format((float) $fila['total_neto'], 0, ',', '.') ?></strong></td>
                </tr>
              <?php endwhile; $stmt->close(); ?>
              </tbody>
              <tfoot><tr><th colspan="6" class="text-end">Total neto</th><th>Gs. <?= number_format($total, 0, ',', '.') ?></th></tr></tfoot>
            </table>
          </div>
        </div>
      </div>
      <?php if (!$cerrada): ?>
        <button class="btn btn-hm mt-3 no-print" type="submit"><i class="fa fa-save me-1"></i> Guardar cambios</button>
      <?php endif; ?>
    </form>
  </div>
</main>
<?php include __DIR__ . '/../../includes/footer.php'; ?>
