from rest_framework import serializers
from .models import Customer
from apps.calls.models import Call


class CustomerSerializer(serializers.ModelSerializer):
    class Meta:
        model = Customer
        fields = '__all__'


class DateRangeSerializer(serializers.Serializer):
    start_date = serializers.DateTimeField()
    end_date = serializers.DateTimeField()


class CustomerHistorySerializer(DateRangeSerializer):
    customer_id = serializers.IntegerField()
    start_date = serializers.DateTimeField()
    end_date = serializers.DateTimeField()

    def validate(self, attrs):
        if attrs['start_date'] >= attrs['end_date']:
            raise serializers.ValidationError(
                "start_date must be before end_date"
            )
        return attrs

class CustomerDropDownStats(serializers.Serializer):
    customer_id = serializers.IntegerField()
    customer_name = serializers.CharField()
    phone_number = serializers.CharField()
    total_calls = serializers.IntegerField()
    missed_calls = serializers.IntegerField()
    received_calls = serializers.IntegerField()
    not_transferred_calls = serializers.IntegerField()
    last_call_time = serializers.DateTimeField()

class CallTimelineSerializer(serializers.ModelSerializer):
    advisor_name = serializers.SerializerMethodField()

    class Meta:
        model = Call
        fields = (
            'id',
            'twilio_call_sid',
            'sentiment',
            'summary',
            'duration',
            'created_at',
            'call_id',
            'advisor_name',
        )

    def get_advisor_name(self, obj):
        if obj.transfer_user and hasattr(obj.transfer_user, 'profile'):
            return f"{obj.transfer_user.profile.first_name} {obj.transfer_user.profile.last_name}".strip()
        return None
