from django.shortcuts import render
from django.shortcuts import redirect
from django.views.generic import View
from django.contrib import messages
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.contrib.auth.mixins import LoginRequiredMixin
from django.utils import timezone

from .models import FacebookReview, FacebookReviewReply
from .forms import ReplyForm

from .review_utils import reply2facebook_review


class FacebookReviews(LoginRequiredMixin, View):

    def post(self, request, *args, **kwargs):
        form = ReplyForm(self.request.POST)
        if form.is_valid():
            replied_text = form.cleaned_data.get('reply')
        review_id = self.request.POST['review_id']
        print('review-id', review_id)
        # TODO: Reply this review using selenium...
        reply2facebook_review(
            review_id=review_id,
            reply=replied_text,
            love=True
        )

        FacebookReviewReply.objects.create(
            review_id=review_id,
            create_time=timezone.now(),
            replied_text=replied_text
        )
        messages.success(request, f'Your reply has been posted!')

        return redirect('facebook-reviews')

    def get(self, request, *args, **kwargs):
        now = timezone.now()
        form = ReplyForm()
        date = now - timezone.timedelta(days=15)

        reviews = FacebookReview.objects.filter(
            facebookreviewreply=None,
            create_time__gte=date
        ).order_by('create_time')

        page = request.GET.get('page', 1)
        paginator = Paginator(reviews, 10)
        try:
            reviews = paginator.page(page)
        except PageNotAnInteger:
            reviews = paginator.page(1)
        except EmptyPage:
            reviews = paginator.page(paginator.num_pages)
        context = {'reviews': reviews, 'form': form}
        return render(request, 'facebook-reviews.html', context=context)