from typing import Optional, Union

from fastapi import APIRouter, Depends, Request
from fastapi.responses import HTMLResponse

from src.depends.auth import verify_session
from src.model.internal.session import UserSession
from src.model.view.logout_view_model import LogoutViewModel
from src.system_var import constants
from src.templates import templates

router = APIRouter()

#########################
# Views                 #
#########################


@router.get('/', response_class=HTMLResponse)
def logout_view(
    request: Request,
    reason: Optional[str] = None,
    session: Union[UserSession, None] = Depends(verify_session)
):
    # どういうルートでログインしたかを判断するため、refererを取得
    referer = request.headers.get('referer', '')

    redirect_to = '/login/userlogin'
    link_text = 'MeDaCA機能メニューへ'
    # セッションが切れておらず、メンテユーザである、またはメンテログイン画面から遷移した場合、メンテログイン画面に戻す
    if (session is not None and session.user_flg == '1') or referer.endswith('maintlogin'):
        redirect_to = '/login/maintlogin'
        link_text = 'Login画面に戻る'

    logout = LogoutViewModel()
    logout.redirect_to = redirect_to
    logout.reason = constants.LOGOUT_REASON_MESSAGE_MAP.get(reason, '')
    logout.link_text = link_text
    template_response = templates.TemplateResponse(
        'logout.html',
        {
            'request': request,
            'logout': logout,
        }
    )
    # クッキーを削除
    template_response.delete_cookie('session')
    return template_response
