<?php
ini_set('display_errors', 0);
error_reporting(0);

ob_start();
include '../adm/config/db.php';
ob_end_clean();

session_start();

header('Content-Type: application/json');

// ─── Rate Limiting ────────────────────────────────────────────────
$ip          = $_SERVER['REMOTE_ADDR'] ?? 'unknown';
$limitKey    = 'login_attempts_' . md5($ip);
$windowKey   = 'login_window_'   . md5($ip);
$maxAttempts = 5;
$windowSecs  = 900; // 15 minutos

// Reinicia janela se expirou
if (isset($_SESSION[$windowKey]) && (time() - $_SESSION[$windowKey]) > $windowSecs) {
    $_SESSION[$limitKey]  = 0;
    $_SESSION[$windowKey] = time();
}

// Inicializa contadores
if (!isset($_SESSION[$limitKey]))  { $_SESSION[$limitKey]  = 0; }
if (!isset($_SESSION[$windowKey])) { $_SESSION[$windowKey] = time(); }

if ($_SESSION[$limitKey] >= $maxAttempts) {
    $restante = $windowSecs - (time() - $_SESSION[$windowKey]);
    $minutos  = ceil($restante / 60);
    echo json_encode([
        'success' => false,
        'message' => "Muitas tentativas. Aguarde {$minutos} minuto(s) e tente novamente."
    ], JSON_UNESCAPED_UNICODE);
    exit;
}
// ─────────────────────────────────────────────────────────────────

$response = ['success' => false, 'message' => 'Erro desconhecido.'];

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $inputJSON = file_get_contents('php://input');
    $input = json_decode($inputJSON, TRUE);

    $email = trim($input['email'] ?? '');
    $senha = $input['senha']     ?? '';

    if (!isset($conn) || $conn->connect_error) {
        $response['message'] = "Falha na conexão com o banco de dados.";
    } elseif (empty($email) || empty($senha)) {
        $response['message'] = "Preencha todos os campos.";
    } else {
        $stmt = $conn->prepare("SELECT id, nome_completo, senha, status FROM usuarios WHERE email_principal = ? LIMIT 1");
        if (!$stmt) {
            $response['message'] = "Erro interno: " . $conn->error;
        } else {
            $stmt->bind_param("s", $email);
            $stmt->execute();
            $result = $stmt->get_result();

            if ($user = $result->fetch_assoc()) {
                if (password_verify($senha, $user['senha'])) {
                    if ($user['status'] === 'ATIVO') {
                        // Login bem-sucedido → zera contadores
                        $_SESSION[$limitKey]  = 0;
                        $_SESSION[$windowKey] = time();

                        $_SESSION['usuario_id']   = $user['id'];
                        $_SESSION['usuario_nome'] = $user['nome_completo'];
                        $response = [
                            'success'  => true,
                            'redirect' => !empty($_SESSION['carrinho']) ? 'checkout.php' : ''
                        ];
                    } else {
                        $_SESSION[$limitKey]++;
                        $response['message'] = "Sua conta ainda não está ativa. Entre em contato com o suporte.";
                    }
                } else {
                    $_SESSION[$limitKey]++;
                    $response['message'] = "E-mail ou senha incorretos.";
                }
            } else {
                $_SESSION[$limitKey]++;
                $response['message'] = "E-mail ou senha incorretos.";
            }
        }
    }
} else {
    $response['message'] = "Método inválido.";
}

echo json_encode($response, JSON_UNESCAPED_UNICODE);

