import os

from django.shortcuts import render
from rest_framework import mixins
from rest_framework import generics
from rest_framework.parsers import MultiPartParser, FormParser
from rest_framework.response import Response
from .models import Builder
from .serializers import BuilderSerializer
# Create your views here.


class BuilderApiView(mixins.ListModelMixin,
                     mixins.CreateModelMixin,
                     mixins.UpdateModelMixin,
                     generics.GenericAPIView):
    queryset = Builder.objects.all()
    serializer_class = BuilderSerializer
    parser_classes = [MultiPartParser, FormParser]

    def get(self, request, *args, **kwargs):
        build = BuilderSerializer(self.get_queryset(), many=True)
        return Response({'data': build.data})

    def post(self, request, *args, **kwargs):
        build = BuilderSerializer(data=request.data)
        build.is_valid(raise_exception=True)
        build.save()
        return Response({'message': build.data})


class BuilderApiViewUpd(mixins.UpdateModelMixin,
                        mixins.DestroyModelMixin,
                        generics.GenericAPIView):
    queryset = Builder.objects.all()
    serializer_class = BuilderSerializer

    def put(self, request, *args, **kwargs):
        id = kwargs['pk']
        print(request.FILES, 'files')
        build = Builder.objects.get(pk=id)
        serial = BuilderSerializer(build, data=request.data)
        serial.is_valid(raise_exception=True)
        serial.save()
        return Response({'data': serial.data})

    def delete(self, request, *args, **kwargs):
        id = kwargs['pk']
        build = Builder.objects.get(pk=id)
        image = build.image_logo
        if os.path.exists(image.path):
            build.delete()
            os.remove(image.path)
            parent_folder = os.path.dirname(image.path)
            if not os.listdir(parent_folder):
                os.rmdir(parent_folder)
            return Response({'file': 'exist'})
        return Response({'file':'not exists'})