import logging

from django.conf import settings
from rest_framework import status
from rest_framework.permissions import AllowAny, IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView

from chat.api.permissions import InternalServiceAllowedIP
from chat.api.serializers import (
    ChatMessageRequestSerializer,
    ChatMessageResponseSerializer,
)
from chat.services.chat_service import ChatService


logger = logging.getLogger("chat.api")


class HealthCheckView(APIView):
    authentication_classes = []
    permission_classes = [AllowAny]

    def get(self, request):
        return Response({"status": "ok"}, status=status.HTTP_200_OK)


class ChatMessageView(APIView):
    permission_classes = [IsAuthenticated, InternalServiceAllowedIP]
    throttle_scope = "chat"

    def post(self, request):
        serializer = ChatMessageRequestSerializer(
            data=request.data,
            context={"max_question_length": settings.MAX_QUESTION_LENGTH},
        )
        serializer.is_valid(raise_exception=True)

        response = ChatService().send_message(**serializer.validated_data)
        output = ChatMessageResponseSerializer(response)

        logger.info(
            "Chat message processed",
            extra={"conversation_id": response.conversation_id, "model": response.model},
        )
        return Response(output.data, status=status.HTTP_200_OK)
