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

// Se já está logado (e a sessão ainda vale), vai direto para o painel
if (sessao_situacao() === '') {
    header('Location: painel.php');
    exit;
}

$erro = '';
$aviso = '';
if (!empty($_GET['expirada'])) {
    $aviso = 'Sua sessão expirou por segurança. Entre novamente.';
} elseif (!empty($_GET['saiu'])) {
    $aviso = 'Você saiu do painel.';
}

$semCredencial = false;
try {
    $semCredencial = credenciais_atuais()['origem'] === 'nenhuma';
} catch (ErroDados $e) {
    $erro = $e->getMessage();
}

$bloqueioRestante = 0;
try {
    $bloqueioRestante = limitador_bloqueio_restante('login');
} catch (ErroDados $e) {
    // sem conseguir registrar tentativas, o login fica indisponível (falha segura)
    $erro = 'Não foi possível verificar as tentativas de acesso. Verifique as permissões da pasta admin/privado.';
    $bloqueioRestante = -1;
}

if ($_SERVER['REQUEST_METHOD'] === 'POST' && $bloqueioRestante === 0 && $erro === '' && !$semCredencial) {
    if (!csrf_check($_POST['csrf'] ?? null)) {
        $erro = 'A página ficou aberta por muito tempo. Atualize e tente novamente.';
    } else {
        $usuario = trim((string) ($_POST['usuario'] ?? ''));
        $senha = (string) ($_POST['senha'] ?? '');

        $origem = null;
        try {
            $origem = credenciais_verificar($usuario, $senha);
        } catch (ErroDados $e) {
            $erro = $e->getMessage();
        }

        if ($origem !== null) {
            limitador_registrar_sucesso('login');
            sessao_autenticar(ADMIN_USER, $origem === 'instalacao');
            registrar_auditoria('login-sucesso', ['credencial' => $origem]);
            header('Location: ' . ($origem === 'instalacao' ? 'trocar-senha.php?obrigatoria=1' : 'painel.php'));
            exit;
        }

        if ($erro === '') {
            limitador_registrar_falha('login');
            registrar_auditoria('login-falha', ['usuario_informado' => substr($usuario, 0, 40)]);
            usleep(random_int(200000, 500000)); // atraso pequeno e variável a cada erro
            $bloqueioRestante = limitador_bloqueio_restante('login');
            $erro = $bloqueioRestante > 0
                ? 'Muitas tentativas incorretas. O acesso foi bloqueado temporariamente.'
                : 'Usuário ou senha incorretos.';
        }
    }
}

$minutos = (int) ceil(max(0, $bloqueioRestante) / 60);
?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="robots" content="noindex, nofollow">
<title>Painel Administrativo | IPRESMAT</title>
<style>
  *{box-sizing:border-box;margin:0;padding:0}
  body{font-family:Arial,Helvetica,sans-serif;background:#f5f8fb;min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}
  .box{background:#fff;border:1px solid #e1e8ef;border-radius:10px;box-shadow:0 4px 18px rgba(10,47,82,.08);padding:32px;width:100%;max-width:360px}
  h1{font-size:1.25rem;color:#0b4a78;margin-bottom:4px}
  p.sub{color:#66758a;font-size:.8125rem;margin-bottom:20px}
  label{display:block;font-size:.8125rem;font-weight:bold;color:#0d4570;margin-bottom:4px;margin-top:14px}
  input[type=text],input[type=password]{width:100%;padding:10px;border:1px solid #dce3e9;border-radius:6px;font-size:.9375rem}
  input:focus{outline:2px solid #f5b731}
  button{width:100%;margin-top:20px;padding:11px;border:0;border-radius:6px;background:#0b4a78;color:#fff;font-weight:bold;cursor:pointer;font-size:.9375rem}
  button:hover{background:#1972b4}
  .erro{background:#fdecec;color:#a3231f;border:1px solid #f3c8c6;border-radius:6px;padding:10px;font-size:.8125rem;margin-top:14px}
  .aviso{background:#eef4fa;color:#0d4570;border:1px solid #cfe0f2;border-radius:6px;padding:10px;font-size:.8125rem;margin-top:14px}
  .voltar{display:block;text-align:center;margin-top:18px;font-size:.75rem;color:#66758a;text-decoration:none}
</style>
</head>
<body>
  <div class="box">
    <h1>Painel Administrativo</h1>
    <p class="sub">IPRESMAT — gestão de documentos do portal</p>

    <?php if ($aviso): ?><div class="aviso" role="status"><?= htmlspecialchars($aviso) ?></div><?php endif; ?>

    <?php if ($semCredencial): ?>
      <div class="erro" role="alert">O painel ainda não tem uma senha configurada. Peça à equipe de TI para definir a senha (instruções em docs/LEIA-ME-PAINEL-ADMIN.md).</div>
    <?php elseif ($bloqueioRestante > 0): ?>
      <div class="erro" role="alert"><?= $erro ? htmlspecialchars($erro) . ' ' : '' ?>Aguarde cerca de <?= $minutos ?> minuto<?= $minutos > 1 ? 's' : '' ?> e tente novamente.</div>
    <?php else: ?>
      <?php if ($erro): ?><div class="erro" role="alert"><?= htmlspecialchars($erro) ?></div><?php endif; ?>
      <?php if ($bloqueioRestante === 0): ?>
      <form method="post" autocomplete="off">
        <input type="hidden" name="csrf" value="<?= htmlspecialchars(csrf_token()) ?>">
        <label for="usuario">Usuário</label>
        <input type="text" id="usuario" name="usuario" required autofocus autocomplete="username">
        <label for="senha">Senha</label>
        <input type="password" id="senha" name="senha" required autocomplete="current-password">
        <button type="submit">Entrar</button>
      </form>
      <?php endif; ?>
    <?php endif; ?>

    <a class="voltar" href="../index.html">&larr; Voltar ao portal</a>
  </div>
</body>
</html>
