""" routes/auth.py """

from urllib.parse import quote_plus
from urllib.parse import urlencode

from flask import redirect
from flask import session
from flask import url_for

from lib.logger import logset
from lib.project import env
from lib.project import oauth

log = logset(__name__)
log.propagate = False


def add_routes(app):
    app.add_url_rule("/auth/callback", "callback", callback, methods=["GET", "POST"])
    app.add_url_rule("/auth/login", "login", login)
    app.add_url_rule("/auth/logout", "logout", logout, methods=["GET", "POST"])


def login():
    redirect_uri = url_for("callback", _external=True)
    response = oauth.auth0.authorize_redirect(redirect_uri=redirect_uri)
    return response


def callback():
    token = oauth.auth0.authorize_access_token()
    session["user"] = token
    return redirect("/")


def logout():
    session.clear()
    return redirect(
        "https://"
        + env.auth0.domain
        + "/v2/logout?"
        + urlencode(
            {
                "returnTo": url_for("home", _external=True),
                "client_id": env.auth0.client,
            },
            quote_via=quote_plus,
        )
    )
