"""
Serializers for Social Media Comments app
"""
from rest_framework import serializers
from .models import SocialMediaComment, SocialPlatform


class SocialMediaCommentSerializer(serializers.ModelSerializer):
    """Serializer for SocialMediaComment model with bilingual AI analysis"""
    
    platform_display = serializers.CharField(source='get_platform_display', read_only=True)
    is_analyzed = serializers.ReadOnlyField()
    sentiment_classification_en = serializers.SerializerMethodField()
    sentiment_classification_ar = serializers.SerializerMethodField()
    sentiment_score = serializers.SerializerMethodField()
    confidence = serializers.SerializerMethodField()
    
    class Meta:
        model = SocialMediaComment
        fields = [
            'id',
            'platform',
            'platform_display',
            'comment_id',
            'comments',
            'author',
            'raw_data',
            'post_id',
            'media_url',
            'like_count',
            'reply_count',
            'rating',
            'published_at',
            'scraped_at',
            'ai_analysis',
            'is_analyzed',
            'sentiment_classification_en',
            'sentiment_classification_ar',
            'sentiment_score',
            'confidence',
        ]
        read_only_fields = [
            'scraped_at',
        ]
    
    def get_sentiment_classification_en(self, obj):
        """Get English sentiment classification"""
        if not obj.ai_analysis:
            return None
        return obj.ai_analysis.get('sentiment', {}).get('classification', {}).get('en')
    
    def get_sentiment_classification_ar(self, obj):
        """Get Arabic sentiment classification"""
        if not obj.ai_analysis:
            return None
        return obj.ai_analysis.get('sentiment', {}).get('classification', {}).get('ar')
    
    def get_sentiment_score(self, obj):
        """Get sentiment score"""
        if not obj.ai_analysis:
            return None
        return obj.ai_analysis.get('sentiment', {}).get('score')
    
    def get_confidence(self, obj):
        """Get confidence score"""
        if not obj.ai_analysis:
            return None
        return obj.ai_analysis.get('sentiment', {}).get('confidence')
    
    def validate_platform(self, value):
        """Validate platform choice"""
        if value not in SocialPlatform.values:
            raise serializers.ValidationError(f"Invalid platform. Must be one of: {', '.join(SocialPlatform.values)}")
        return value


class SocialMediaCommentListSerializer(serializers.ModelSerializer):
    """Lightweight serializer for list views"""
    
    platform_display = serializers.CharField(source='get_platform_display', read_only=True)
    is_analyzed = serializers.ReadOnlyField()
    sentiment = serializers.SerializerMethodField()
    
    class Meta:
        model = SocialMediaComment
        fields = [
            'id',
            'platform',
            'platform_display',
            'comment_id',
            'comments',
            'author',
            'like_count',
            'reply_count',
            'rating',
            'published_at',
            'is_analyzed',
            'sentiment',
        ]
    
    def get_sentiment(self, obj):
        """Get sentiment classification (English)"""
        if not obj.ai_analysis:
            return None
        return obj.ai_analysis.get('sentiment', {}).get('classification', {}).get('en')
