from django.db.models import Q
from rest_framework import status, viewsets
from rest_framework.decorators import action
from rest_framework.permissions import AllowAny
from rest_framework.response import Response

from apps.events.models import Event
from apps.events.serializers import EventDetailSerializer, EventListSerializer
from apps.stores.serializers import StoreListSerializer


class EventViewSet(viewsets.ViewSet):
    """ViewSet for events."""

    permission_classes = [AllowAny]

    def list(self, request):
        """GET /events/ — list all events."""
        events = Event.objects.all().order_by("-start_date")
        serializer = EventListSerializer(events, many=True)
        return Response(serializer.data)

    def retrieve(self, request, pk=None):
        """GET /events/{id}/ — event detail."""
        try:
            event = Event.objects.get(pk=pk)
        except Event.DoesNotExist:
            return Response({"detail": "Not found."}, status=status.HTTP_404_NOT_FOUND)
        serializer = EventDetailSerializer(event)
        return Response(serializer.data)

    @action(detail=True, methods=["get"])
    def stores(self, request, pk=None):
        """GET /events/{id}/stores/ — stores in an event."""
        try:
            event = Event.objects.get(pk=pk)
        except Event.DoesNotExist:
            return Response({"detail": "Not found."}, status=status.HTTP_404_NOT_FOUND)

        stores = event.stores.all()

        # Optional search
        search = request.query_params.get("search")
        if search:
            stores = stores.filter(Q(name_en__icontains=search) | Q(name_ar__icontains=search))

        serializer = StoreListSerializer(stores, many=True)
        return Response(serializer.data)
