from django.conf import settings
from django.contrib.auth import login, logout
from django.contrib.auth.decorators import login_required
from django.http import HttpRequest, HttpResponse
from django.shortcuts import redirect, render, reverse

from . import forms


def auth_login(req: HttpRequest) -> HttpResponse:
    if req.method == "POST":
        form = forms.LoginForm(data=req.POST)

        if not form.is_valid():
            return render(req, "account/login.html", dict(form=form))

        user = form.get_user()
        login(req, user)

        redirect_url = getattr(req.GET, "next", settings.LOGIN_REDIRECT_URL)
        return redirect(redirect_url)

    elif req.method == "GET":
        form = forms.LoginForm()
        return render(req, "account/login.html", dict(form=form))

    return HttpResponse(status=405)


@login_required
def auth_logout(req: HttpRequest) -> HttpResponse:
    logout(req)
    return redirect(settings.LOGOUT_REDIRECT_URL)


def auth_register(req: HttpRequest) -> HttpResponse:
    if req.user.is_authenticated:
        return redirect(reverse("me"))
    if req.method == "POST":
        form = forms.RegisterForm(data=req.POST)

        if not form.is_valid():
            return render(req, "account/register.html", dict(form=form))

        user = form.save()
        login(req, user)
        return redirect(settings.LOGIN_BASE_URL)

    elif req.method == "GET":
        form = forms.RegisterForm()
        return render(req, "account/register.html", dict(form=form))

    return HttpResponse(status=405)


@login_required
def me(req: HttpRequest) -> HttpResponse:
    print(req.user.username)
    return render(req, "account/me.html")