from django.core.exceptions import PermissionDenied
from django.contrib.auth.mixins import LoginRequiredMixin
from django.http import JsonResponse
from django.shortcuts import render
from django.views.generic import FormView, DetailView

from .forms import FileForm
from .models import File

class FileUploadView(LoginRequiredMixin, FormView):
    model = File
    form_class = FileForm

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.user = self.request.user
        self.object.save()

        return JsonResponse({
            'is_valid': True, 'url': self.object.file.url,
            'name': self.object.file.name,
            'id': self.object.pk
        })

    def form_invalid(self, form):
        return JsonResponse({'is_valid': False, 'errors': form.errors})


class FileDeleteView(LoginRequiredMixin, DetailView):
    model = File

    def get(self, request, *args, **kwargs):
        return self.post(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        self.object = self.get_object()

        if request.user != self.object.user:
            raise PermissionDenied

        self.object.delete()
        
        return JsonResponse({
            'success': True
        })