# pharmacies_app/views.py

from rest_framework import viewsets, filters, status
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.utils import json

from .models import Ville, Pharmacie
from .serializers import VilleSerializer, PharmacieSerializer
from rest_framework.response import Response


class VilleViewSet(viewsets.ModelViewSet):
    queryset = Ville.objects.all()
    serializer_class = VilleSerializer
    filter_backends = [filters.SearchFilter, filters.OrderingFilter]
    search_fields = ['nomVille']  # Permet de rechercher des villes par nom


class PharmacieViewSet(viewsets.ModelViewSet):
    queryset = Pharmacie.objects.all()
    serializer_class = PharmacieSerializer
    filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter]
    filterset_fields = ['villePharmacie', 'estDeGarde', 'estOuvert',
                        'quartierPharmacie']  # Permet de filtrer par ces champs
    search_fields = ['nomPharmacie', 'adressePharmacie',
                     'quartierPharmacie']  # Permet de rechercher par nom, adresse, quartier
    ordering = ['nomPharmacie']  # Ordre par défaut

    def create(self, request, *args, **kwargs):
        # On appelle d'abord la méthode create de la classe parente
        # pour bénéficier des validations et de la création de l'objet.
        print(request.data)
        try:
            serializer = self.get_serializer(data=request.data)
            serializer.is_valid(raise_exception=True)
            self.perform_create(serializer)
            headers = {
                'HX-Trigger': json.dumps({
                    'pharmacyCreate': {'status': 204,
                                       'msg': "Pharmacie enregistrée avec succès",
                                       },
                })
            }

            # En cas de succès, on retourne notre réponse personnalisée.
            return Response({'status': 'success'}, status=status.HTTP_201_CREATED, headers=headers)

        except Exception as e:
            # En cas d'erreur (par exemple, une erreur de validation),
            # on retourne une réponse d'erreur.
            print("Exception: ", e)
            headers = {
                'HX-Trigger': json.dumps({
                    'pharmacyCreate': {'status': 400,
                                       'msg': "Une erreur est survenue et la pharmacie n'a pas été enregistrée.",
                                       },
                })
            }
            return Response({'status': 'error', 'details': str(e)}, status=status.HTTP_400_BAD_REQUEST, headers=headers)
