from rest_framework import serializers

from apps.calls.models import Call
from django.contrib.auth import get_user_model
User = get_user_model()


class CallPhraseReportSerializer(serializers.ModelSerializer):
    id = serializers.IntegerField(source='pk')
    call_id = serializers.CharField()
    twilio_call_id = serializers.CharField(source="twilio_call_sid")
    summary = serializers.CharField()
    call_date_time = serializers.DateTimeField(source='created_at')
    customer_name = serializers.CharField(source='caller_name')
    customer_phone = serializers.CharField(source='from_number')
    transcript = serializers.CharField()
    catch_phrases_found = serializers.SerializerMethodField()
    advisor = serializers.SerializerMethodField()

    def get_customer_phone(self, obj):
        return obj.from_number or "Unknown"

    def get_catch_phrases_found(self, call):
        return getattr(call, "_cached_phrases", [])

    def get_advisor(self, call):
        if not call.transfer_user_id:
            return self.return_empty()

        user = User.objects.filter(id=call.transfer_user_id).select_related("profile").first()
        if not user or not hasattr(user, "profile"):
            return self.return_empty()

        return {
            "name": user.profile.full_name,
            "phone": call.transfer_number,
        }

    def return_empty(self):
        return {"name": None, "phone": None, }

    class Meta:
        model = Call

        fields = [
            "id",
            "call_id",
            "twilio_call_id",
            "summary",
            "call_date_time",
            "customer_name",
            "customer_phone",
            "transcript",
            "catch_phrases_found",
            "advisor",
        ]
