# retoor <retoor@molodetz.nl>

import time

import requests

from devplacepy.database import get_table, refresh_snapshot
from tests.conftest import BASE_URL

JSON_gateway = {"Accept": "application/json"}
_counter_gateway = [0]


def _db_user_gateway(name):
    refresh_snapshot()
    return get_table("users").find_one(username=name)


def _unique_gateway(prefix="gw"):
    _counter_gateway[0] += 1
    return f"{prefix}{int(time.time() * 1000)}{_counter_gateway[0]}"


def admin_session(seeded_db):
    session = requests.Session()
    session.headers.update(
        {"X-API-KEY": _db_user_gateway("alice_test")["api_key"], **JSON_gateway}
    )
    return session


def member_key():
    name = _unique_gateway("gwmem")
    requests.post(
        f"{BASE_URL}/auth/signup",
        data={
            "username": name,
            "email": f"{name}@t.dev",
            "password": "secret123",
            "confirm_password": "secret123",
            "birth_date": "1990-01-01",
            "accept_terms": "1",
        },
        allow_redirects=True,
    )
    return _db_user_gateway(name)["api_key"]


def test_gateway_page_requires_admin(seeded_db):
    assert (
        requests.get(
            f"{BASE_URL}/admin/gateway", headers=JSON_gateway, allow_redirects=False
        ).status_code
        == 401
    )
    key = member_key()
    assert (
        requests.get(
            f"{BASE_URL}/admin/gateway",
            headers={**JSON_gateway, "X-API-KEY": key},
            allow_redirects=False,
        ).status_code
        == 403
    )


def test_gateway_page_renders_for_admin(seeded_db):
    admin = admin_session(seeded_db)
    response = admin.get(f"{BASE_URL}/admin/gateway", headers={})
    assert response.status_code == 200
    assert "Gateway routing" in response.text
