<?php
require_once __DIR__ . "/../../includes/db.php";
require_once __DIR__ . "/../../includes/auth.php";

function go_login_err(string $msg, string $next=""){
  $base = defined("BASE_URL") ? BASE_URL : "";
  $url = $base . "/login.php?err=" . urlencode($msg);
  if ($next !== "") $url .= "&next=" . urlencode($next);
  header("Location: " . $url);
  exit;
}

$usuario = trim((string)($_POST["usuario"] ?? ""));
$senha   = (string)($_POST["senha"] ?? "");
$next    = (string)($_POST["next"] ?? "");

if ($usuario === "" || $senha === "") {
  go_login_err("Informe usuário e senha.", $next);
}

try {
  $st = $pdo->prepare("SELECT id, nome, usuario, senha_hash, perfil, ativo
                       FROM usuarios
                       WHERE usuario = ?
                       LIMIT 1");
  $st->execute([$usuario]);
  $u = $st->fetch(PDO::FETCH_ASSOC);

  // Mensagem única pra não “vazar” se usuário existe
  if (!$u || (int)$u["ativo"] !== 1 || !password_verify($senha, $u["senha_hash"])) {
    go_login_err("Usuário ou senha inválidos.", $next);
  }

  auth_login($u);

  // Atualiza ultimo_login
  $up = $pdo->prepare("UPDATE usuarios SET ultimo_login = NOW() WHERE id = ?");
  $up->execute([(int)$u["id"]]);

  // Redireciona
  $base = defined("BASE_URL") ? BASE_URL : "";
  $dest = $base . "/garcom/index.php";

  // Se veio "next", só aceitamos caminhos internos (evita open redirect)
  if ($next) {
    if (str_starts_with($next, "/")) {
      $dest = $next;
      if ($base && str_starts_with($dest, $base . "/") === false && $dest !== $base) {
        // mantém interno; se BASE_URL estiver sendo usado como prefixo,
        // você pode adaptar aqui conforme sua estrutura.
      }
    }
  }

  header("Location: " . $dest);
  exit;

} catch (Throwable $e) {
  go_login_err("Erro interno: " . $e->getMessage(), $next);
}
