from django.shortcuts import get_object_or_404, render, redirect
from django.contrib import messages
from django.urls import reverse
from .models import Genre, Movie, MovieList
from django.db.models import Q
from django.contrib.auth.decorators import login_required

@login_required
def moviesView(request):
    movies = Movie.objects.all().order_by('-id')
    featured = Movie.objects.filter(is_featured=True).first()
    exists = MovieList.objects.filter(owner=request.user, movie=featured)
    genres = Genre.objects.all()
    movies_by_genre = {genre: Movie.objects.filter(genre=genre) for genre in genres}
    context = {
        'movies': movies,
        'movies_by_genre': movies_by_genre,
        'featured': featured,
        'exists': exists,
    }

    if request.method == 'POST':
        if exists:
            exists.delete()
            messages.success(request, "Filme removido com sucesso!")
            return redirect('index')
        
        MovieList.objects.create(owner=request.user, movie=featured)
        messages.success(request, "Filme adicionado com sucesso!")
        return redirect('index')
    
    return render(request, 'movies.html', context)

@login_required
def detailMovieView(request, uuid):
    movie = Movie.objects.get(uuid=uuid)
    similar_movies = Movie.objects.filter(genre=movie.genre).exclude(uuid=uuid)
    others_movies = Movie.objects.all().order_by('id')
    in_list = MovieList.objects.filter(owner=request.user, movie=movie).exists()

    context = {
        'movie': movie,
        'similar_movies':similar_movies,
        'others_movies': others_movies,
        'in_list': in_list,
    }
    return render(request, 'detailMovie.html', context)

@login_required
def watchMovieView(request, uuid):
    movie = Movie.objects.get(uuid=uuid)
    similar_movies = Movie.objects.filter(genre=movie.genre)

    context = {
        'movie': movie,
        'similar_movies': similar_movies,
    }
    return render(request, 'watchMovie.html', context)

@login_required
def addMovieToList(request, uuid):
    movie = get_object_or_404(Movie, uuid=uuid)
    owner = request.user

    
    exists = MovieList.objects.filter(owner=owner, movie=movie).exists()
    if exists:
        
        messages.warning(request, "Filme já está na sua lista.")
        return redirect('detail_movie_page', uuid=uuid)

    MovieList.objects.create(owner=owner, movie=movie)

    messages.success(request, "Filme adicionado com sucesso!")
    return redirect('detail_movie_page', uuid=uuid)

@login_required
def removeMovieFromList(request, 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('detail_movie_page', uuid=uuid)

    else:
        messages.error(request, "Filme não estava na sua lista.")
        return redirect('detail_movie_page', uuid=uuid)
    
@login_required
def searchMovieView(request):

    movies = Movie.objects.all()

    
    q = request.GET.get('q', '')

    if q:
        movies = movies.filter(
            Q(title__icontains=q) |
            Q(description__icontains=q) |
            Q(genre__name__icontains=q)
        )
        
    context = {
        'q': q,
        'movies': movies,
    }

    return render(request, 'searchMovie.html', context)




    
