import os

from rest_framework import permissions, viewsets, generics

from django.http import HttpResponse
from django.shortcuts import get_object_or_404, redirect, HttpResponseRedirect

from PyRSS2Gen import RSS2, RSSItem, Guid

from . import models, serializers, forms, utils

from cp_video.pagination import LimitPagination


class VideoAPIView(viewsets.ModelViewSet):
    model = models.Video
    serializer_class = serializers.VideoSerializer
    permission_classes = [permissions.AllowAny]
    pagination_class = LimitPagination
    default_limit = 20

    def get_queryset(self):
        queryset = self.model.objects.filter(s3_file__isnull=False)
        return queryset


class PlaylistRetrieveAPIView(generics.RetrieveAPIView):
    queryset = models.Playlist.objects.all()
    serializer_class = serializers.PlaylistSerializer
    permission_classes = [permissions.AllowAny]
    lookup_field = 'pk'


def playlist_mrss_view(request, pk):
    mrss_items = []
    playlist = get_object_or_404(models.Playlist, pk=pk)

    for playlist_video in playlist.playlist_video.all():
        video = playlist_video.video
        item = RSSItem(
            title=video.title,
            link='link',
            description=video.description,
            guid=Guid('http://example.com/item1'),
            pubDate=video.created,
        )
        mrss_items.append(item)

    rss = RSS2(
        title=playlist.title,
        link='http://example.com/mrss',
        description=playlist.description,
        items=mrss_items,
    )

    # Возвращаем mRSS-канал как HTTP-ответ
    response = HttpResponse(content_type='application/rss+xml')
    rss.write_xml(response)

    return response


def upload_file(request):
    if request.method == 'POST':
        form = forms.UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            video_file = request.FILES['local_file']
            video_name = video_file.name

            utils.handle_uploaded_file(video_file, video_name)
            form.save()

            new_video_id = models.Video.objects.last().id
            redirect_url = f'{request.META["HTTP_ORIGIN"]}/admin/core/video/{new_video_id}/'
            os.remove(video_name)

            return HttpResponseRedirect(redirect_url)

    return redirect(request.META['HTTP_REFERER'])