from rest_framework import viewsets, permissions, status
from rest_framework.response import Response
from rest_framework.views import APIView

from .models import ContactMessage
from .serializers import ContactMessageSerializer
from .emails import send_contact_confirmation_to_user, send_contact_notification_to_admin


class ContactMessageViewSet(viewsets.ReadOnlyModelViewSet):
    """
    Liste / détail des messages de contact pour l'admin.
    """
    queryset = ContactMessage.objects.all()
    serializer_class = ContactMessageSerializer
    permission_classes = [permissions.IsAdminUser]


class ContactSubmitView(APIView):
    """
    Endpoint public pour soumettre un message de contact.
    Enregistre le message, envoie une confirmation à l'utilisateur et une notification à l'admin.
    """
    permission_classes = [permissions.AllowAny]

    def post(self, request):
        serializer = ContactMessageSerializer(data=request.data)
        if not serializer.is_valid():
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
        msg = serializer.save()
        send_contact_confirmation_to_user(msg)
        send_contact_notification_to_admin(msg)
        return Response(ContactMessageSerializer(msg).data, status=status.HTTP_201_CREATED)

