from django.shortcuts import render

# Create your views here.
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status, permissions
from ..models import Notification
from ..tasks import send_admin_notification_to_buyers
from ..serializers import AdminNotificationSerializer
from login_signup.custom_permissions import IsCustomAdmin
from rest_framework.permissions import IsAuthenticated
import logging
from suscription.custom_pagination import CustomPagination
from rest_framework.generics import GenericAPIView


logger = logging.getLogger(__name__)

class AdminNotificationCreateView(APIView):
    permission_classes = [IsAuthenticated, IsCustomAdmin]

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

        title = request.data.get('title', '').strip()
        description = request.data.get('description', '').strip()

        # if Notification.objects.filter(title=title, description=description).exists():
        #     return Response(
        #         {"status": False, "message": "Notification with the same title and description already exists."},
        #         status=status.HTTP_400_BAD_REQUEST
        #     )
        
        if serializer.is_valid():
            notification_instance = serializer.save()
            try:
                send_admin_notification_to_buyers.delay(notification_instance.id)
            except Exception as task_error:
                logger.exception(f"Failed to dispatch push notification task for Notification ID {notification_instance.id}")

            return Response({
                "status": True,
                "message": "Notification created successfully",
                "data": AdminNotificationSerializer(notification_instance).data
            }, status=status.HTTP_201_CREATED)

        return Response(
            {"status": False, "message": "Notification creation failed.", "errors": serializer.errors},
            status=status.HTTP_400_BAD_REQUEST
        )

class AdminNotificationListView(GenericAPIView):
    permission_classes = [IsAuthenticated, IsCustomAdmin]
    serializer_class = AdminNotificationSerializer
    pagination_class = CustomPagination
    queryset = Notification.objects.all().order_by('-created_at')

    def get(self, request):
        page = self.paginate_queryset(self.get_queryset())
        serializer = self.get_serializer(page, many=True, context={'request': request})
        return Response({
            "status": True,
            "message": "Notification list fetched successfully.",
            "data": self.get_paginated_response(serializer.data).data
        })
# class AdminNotificationListView(APIView):
#     permission_classes = [IsAuthenticated, IsCustomAdmin]
#     serializer_class = AdminNotificationSerializer
#     pagination_class = CustomPagination


#     def get(self, request):
#         notifications = Notification.objects.all().order_by('-created_at')
#         # serializer = AdminNotificationSerializer(notifications, many=True)

#         page = self.paginate_queryset(notifications)

#         serializer = self.get_serializer(page, many=True, context={'request': request})
#         return Response({
#             "status": True,
#             'message': 'Notificaiton List fetch successfully',
#             "data": self.get_paginated_response(serializer.data).data
#         })


        # return Response({
        #     "status": True, "message": "Notificaiton List fetch successfully.", "data": serializer.data
        # },status=status.HTTP_200_OK)
