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

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

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $periodo = limpiar($_POST['periodo'] ?? '');

    if (!preg_match('/^\d{4}-(0[1-9]|1[0-2])$/', $periodo)) {
        $error = 'El periodo debe tener el formato AAAA-MM.';
    } else {
        $conn->begin_transaction();
        try {
            $colaboradores = $conn->query(
                "SELECT id, salario_base FROM colaboradores WHERE estado='Activo' ORDER BY id"
            );
            $insertNomina = $conn->prepare(
                "INSERT IGNORE INTO nominas
                 (colaborador_id, periodo, salario_base, horas_extra, bonificaciones, adicionales, descuentos, total_neto, estado)
                 VALUES (?, ?, ?, 0, 0, 0, 0, ?, 'Abierta')"
            );
            $buscarNomina = $conn->prepare(
                'SELECT id FROM nominas WHERE colaborador_id=? AND periodo=? LIMIT 1'
            );
            while ($colaborador = $colaboradores->fetch_assoc()) {
                $colaboradorId = (int) $colaborador['id'];
                $salario = (float) $colaborador['salario_base'];
                $insertNomina->bind_param('isdd', $colaboradorId, $periodo, $salario, $salario);
                $insertNomina->execute();

                $buscarNomina->bind_param('is', $colaboradorId, $periodo);
                $buscarNomina->execute();
                $nomina = $buscarNomina->get_result()->fetch_assoc();
                $nominaId = (int) $nomina['id'];

                sincronizar_planillas_abiertas_colaborador($conn, $colaboradorId);
            }

            $insertNomina->close();
            $buscarNomina->close();
            $conn->commit();

            registrar_auditoria($conn, 'GENERAR', 'nominas', null, 'Generación de Planilla de Salarios ' . $periodo);
            header('Location: /HM/modules/nomina/periodo.php?periodo=' . urlencode($periodo));
            exit;
        } catch (Throwable $e) {
            $conn->rollback();
            $error = 'No se pudo generar la Planilla de Salarios: ' . $e->getMessage();
        }
    }
}

$periodos = $conn->query(
    "SELECT periodo, COUNT(*) colaboradores,
            SUM(total_neto) total,
            IF(SUM(estado='Cerrado')=COUNT(*),'Cerrado','Abierta') estado,
            MAX(cerrado_en) cerrado_en
     FROM nominas
     GROUP BY periodo
     ORDER BY periodo DESC"
);

include __DIR__ . '/../../includes/header.php';
include __DIR__ . '/../../includes/sidebar.php';
?>
<main class="main">
  <?php include __DIR__ . '/../../includes/topbar.php'; ?>
  <div class="content">
    <div class="d-flex flex-wrap justify-content-between align-items-center gap-3 mb-4">
      <div>
        <h3 class="page-title mb-1"><i class="fa fa-money-check-dollar me-2"></i>Planilla de Salarios</h3>
        <p class="text-muted mb-0">Genere, revise y cierre las liquidaciones mensuales.</p>
      </div>
    </div>
    <?php if ($mensaje): ?><div class="alert alert-<?= e($tipoMensaje) ?>"><?= e($mensaje) ?></div><?php endif; ?>
    <?php if ($error): ?><div class="alert alert-danger"><?= e($error) ?></div><?php endif; ?>

    <div class="card card-hm mb-4">
      <div class="card-body">
        <form class="row g-3 align-items-end" method="post">
          <div class="col-md-4">
            <label class="form-label" for="periodo">Periodo de la nueva Planilla de Salarios</label>
            <input class="form-control" id="periodo" type="month" name="periodo" required>
          </div>
          <div class="col-md-auto">
            <button class="btn btn-hm" type="submit"><i class="fa fa-gears me-1"></i> Generar Planilla de Salarios</button>
          </div>
        </form>
        <div class="form-text mt-2">La planilla quedará pregrabada en estado Abierta con salarios, descuentos y adicionales vigentes.</div>
      </div>
    </div>

    <div class="card card-hm">
      <div class="card-body">
        <div class="table-responsive">
          <table class="table table-hover align-middle mb-0">
            <thead><tr><th>Periodo</th><th>Colaboradores</th><th>Total neto</th><th>Estado</th><th>Cierre</th><th class="text-end">Acciones</th></tr></thead>
            <tbody>
            <?php while ($fila = $periodos->fetch_assoc()): ?>
              <tr>
                <td><?= e($fila['periodo']) ?></td>
                <td><?= e(numero_py($fila['colaboradores'])) ?></td>
                <td>Gs. <?= number_format((float) $fila['total'], 0, ',', '.') ?></td>
                <td><span class="badge <?= $fila['estado'] === 'Cerrado' ? 'bg-dark' : 'bg-warning text-dark' ?>"><?= e($fila['estado']) ?></span></td>
                <td><?= e($fila['cerrado_en'] ?: '—') ?></td>
                <td class="text-end">
                  <a class="btn btn-sm btn-outline-primary" href="/HM/modules/nomina/periodo.php?periodo=<?= e($fila['periodo']) ?>"><i class="fa fa-eye me-1"></i> Ver</a>
                  <?php if ($fila['estado'] === 'Cerrado'): ?>
                    <form class="d-inline" method="post" action="/HM/modules/nomina/eliminar.php"
                          onsubmit="return confirm('¿Eliminar definitivamente la Planilla de Salarios <?= e($fila['periodo']) ?>?');">
                      <input type="hidden" name="periodo" value="<?= e($fila['periodo']) ?>">
                      <button class="btn btn-sm btn-outline-danger" type="submit"><i class="fa fa-trash me-1"></i> Eliminar</button>
                    </form>
                  <?php endif; ?>
                </td>
              </tr>
            <?php endwhile; ?>
            </tbody>
          </table>
        </div>
      </div>
    </div>
  </div>
</main>
<?php include __DIR__ . '/../../includes/footer.php'; ?>
