from django.shortcuts import get_object_or_404, render, redirect
from django.contrib.auth import authenticate, login, logout
from django.contrib import messages
from movies.models import *
from .forms import *
from .decorators import is_auth
from django.contrib.auth.decorators import login_required


@login_required
def myProfileView(request):
    movie_list = MovieList.objects.filter(owner=request.user)
    user_movie_list = []

    for movie in movie_list:
        user_movie_list.append(movie.movie)

    context = {
        'movies': user_movie_list
    }
    
    if request.method == 'POST':
        uuid = request.POST['uuid']
        movie = get_object_or_404(Movie, uuid=uuid)
        owner = request.user

        obj = MovieList.objects.filter(owner=owner, movie=movie)
        if obj:
            obj.delete()
            messages.success(request, "Filme removido com sucesso!")
            return redirect('myprofile_page')

        else:
            messages.error(request, "Filme não estava na sua lista.")
            return redirect('myprofile_page')
    return render(request, 'myProfile.html', context)

@is_auth()
def loginView(request):
    if request.method == 'POST':
        form = CustomLoginForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            user = authenticate(request, username=username, password=password)
            if user is not None:
                login(request, user)
                messages.success(request, 'Login efetuado com sucesso.')
                return redirect('index')
            else:
                messages.error(request, 'Credenciais inválidas.')
    return render(request, 'login.html')

@is_auth()
def signupView(request):
    if request.method == 'POST':
        form = CustomUserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            messages.success(request, 'Conta criada com sucesso. Faça login.')
            return redirect('login_page')
        else:
            messages.error(request, 'Corrija os erros no formulário.')
    else:
        form = CustomUserCreationForm()

    context = {
        'form':form
    }
    return render(request, 'signup.html', context)

def logoutView(request):
    logout(request)
    messages.success(request, 'Sessão terminada com sucesso.')
    return redirect('login_page')