#!/usr/bin/env python3

from datetime import timedelta
import logging

import pytest
from tentacles.db import Db


# FIXME: Should this be an autouse fixture? Maybe. Doesn't buy much tho.
logging.addLevelName(logging.DEBUG - 5, "TRACE")
logging.TRACE = logging.DEBUG - 5


@pytest.fixture
def db():
    conn = Db(":memory:")
    conn.connect()
    conn.migrate()
    yield conn
    conn.close()


@pytest.fixture
def username_testy():
    return "testy@test.com"


@pytest.fixture
def password_testy():
    return "testpw"


@pytest.fixture
def uid_testy(db: Db, username_testy, password_testy) -> int:
    return db.try_create_user(
        username=username_testy,
        email=username_testy,
        password=password_testy,
        sid=1,
        gid=0,  # Note: to bypass the approve/enable machinery
    ).id


@pytest.fixture
def login_ttl() -> timedelta:
    return timedelta(hours=12)


@pytest.fixture
def sid_testy(db: Db, uid_testy, username_testy, password_testy, login_ttl):
    res = db.try_login(username=username_testy, password=password_testy, ttl=login_ttl)
    assert res.user_id == uid_testy
    return res.id
