from http import HTTPStatus

from fastapi import Request
from fastapi.params import Depends
from fastapi.templating import Jinja2Templates
from starlette.exceptions import HTTPException
from starlette.responses import HTMLResponse

from lnbits.core.models import User
from lnbits.decorators import check_user_exists

from . import lnurlp_ext, lnurlp_renderer
from .crud import get_pay_link

templates = Jinja2Templates(directory="templates")


@lnurlp_ext.get("/", response_class=HTMLResponse)
async def index(request: Request, user: User = Depends(check_user_exists)):
    return lnurlp_renderer().TemplateResponse(
        "lnurlp/index.html", {"request": request, "user": user.dict()}
    )


@lnurlp_ext.get("/{link_id}", response_class=HTMLResponse)
async def display(request: Request, link_id):
    link = await get_pay_link(link_id)
    if not link:
        raise HTTPException(
            status_code=HTTPStatus.NOT_FOUND, detail="Pay link does not exist."
        )
    ctx = {"request": request, "lnurl": link.lnurl(req=request)}
    return lnurlp_renderer().TemplateResponse("lnurlp/display.html", ctx)


@lnurlp_ext.get("/print/{link_id}", response_class=HTMLResponse)
async def print_qr(request: Request, link_id):
    link = await get_pay_link(link_id)
    if not link:
        raise HTTPException(
            status_code=HTTPStatus.NOT_FOUND, detail="Pay link does not exist."
        )
    ctx = {"request": request, "lnurl": link.lnurl(req=request)}
    return lnurlp_renderer().TemplateResponse("lnurlp/print_qr.html", ctx)
