from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import status
from .serializers import HeroBannerImageSerializer
from products.permissions import IsWebAdmin
from utils.r2.client import R2
from activity_logs.models import ActivityLogs


# Create your views here.
class HeroBannerUploadAPIView(APIView):
    permission_classes = [IsWebAdmin]
    serializer_class = HeroBannerImageSerializer

    def post(self, request):
        data = request.data

        serializer = self.serializer_class(data=data)
        serializer.is_valid(raise_exception=True)
        validated_data = serializer.validated_data

        try:
            image = validated_data["image"]

            r2 = R2(file=image, main_folder_name="home")
            r2_path = r2.upload_fileobj(
                sub_folder_path="hero_banners/"
            )  # always end it with /

            ActivityLogs.record_activity(
                user=request.user, action=f"Uploaded image banner {str(image)}"
            )
            return Response(
                {
                    "message": f"Image {str(image)} uploaded successfully.",
                    "image_url": r2_path,
                },
                status=status.HTTP_200_OK,
            )
        except Exception as e:
            return Response(
                {
                    "message": f"Error occurred while uploading.",
                    "detailed_error": str(e),
                },
                status=status.HTTP_500_INTERNAL_SERVER_ERROR,
            )
