import time

from sqlmodel import Session, select

from rvpc.auth.tokens.typing import DecodedPayload
from rvpc.db import engine
from rvpc.models.models import CaptureTokenInfo, TokenInfo


def get_token_info(d_p: DecodedPayload, session: Session) -> TokenInfo | None:
    stmt = select(TokenInfo).where(
        TokenInfo.nonce == d_p.nonce,
        TokenInfo.token_type == d_p.token_type,
        TokenInfo.expires_at == d_p.expires_at,
    )
    return session.exec(stmt).one_or_none()


def clean_up():
    with Session(engine) as session:
        stmt = select(TokenInfo).where(
            TokenInfo.expires_at >= int(time.time())
        )
        expired_tokens = session.exec(stmt).all()
        for t in expired_tokens:
            session.delete(t)
        session.commit()


def clean_up_capture():
    with Session(engine) as session:
        stmt = select(CaptureTokenInfo).where(
            CaptureTokenInfo.expires_at < int(time.time())
        )
        expired_tokens = session.exec(stmt).all()
        for t in expired_tokens:
            session.delete(t)
        session.commit()
