from rest_framework import serializers
from .models import Country, Team, Player, PlayerStats, MatchResult, LeagueStanding, MatchReview

class CountrySerializer(serializers.ModelSerializer):
    class Meta:
        model = Country
        fields = ['id', 'name', 'slug', 'code', 'league_name']

class TeamSerializer(serializers.ModelSerializer):
    country_name = serializers.CharField(source='country.name', read_only=True)
    
    class Meta:
        model = Team
        fields = ['id', 'name', 'slug', 'country', 'country_name']

class PlayerSerializer(serializers.ModelSerializer):
    # Player model doesn't have a direct team field, so we get team info from PlayerStats
    team_name = serializers.SerializerMethodField()
    country_name = serializers.SerializerMethodField()
    
    class Meta:
        model = Player
        fields = ['id', 'name', 'slug', 'team_name', 'country_name', 'age', 'date_of_birth', 
                  'height', 'nationality', 'positions', 'image_url']
    
    def get_team_name(self, obj):
        # Get the first team associated with this player through PlayerStats
        player_stats = obj.stats.first()
        if player_stats:
            return player_stats.team.name
        return None
    
    def get_country_name(self, obj):
        # Get the country through the team associated with this player
        player_stats = obj.stats.first()
        if player_stats:
            return player_stats.team.country.name
        return None

class PlayerStatsSerializer(serializers.ModelSerializer):
    player_name = serializers.CharField(source='player.name', read_only=True)
    player_slug = serializers.CharField(source='player.slug', read_only=True)  # 添加slug字段
    team_name = serializers.CharField(source='team.name', read_only=True)
    team_slug = serializers.CharField(source='team.slug', read_only=True)  # 添加球队slug字段
    
    class Meta:
        model = PlayerStats
        fields = ['id', 'player', 'player_name', 'player_slug', 'team', 'team_name', 'team_slug', 'tournament', 
                  'appearances', 'minutes_played', 'goals', 'assists', 'tackles', 
                  'interceptions', 'fouls_committed', 'pass_success_rate', 'shots_per_game',
                  'dribbles_per_game', 'rating']

class MatchResultSerializer(serializers.ModelSerializer):
    home_team_name = serializers.CharField(source='home_team.name', read_only=True)
    away_team_name = serializers.CharField(source='away_team.name', read_only=True)
    country_name = serializers.CharField(source='country.name', read_only=True)
    
    class Meta:
        model = MatchResult
        fields = ['id', 'country', 'country_name', 'home_team', 'home_team_name', 
                  'away_team', 'away_team_name', 'match_date', 'home_goals', 
                  'away_goals', 'result']

class LeagueStandingSerializer(serializers.ModelSerializer):
    team_name = serializers.CharField(source='team.name', read_only=True)
    country_name = serializers.CharField(source='country.name', read_only=True)
    
    class Meta:
        model = LeagueStanding
        fields = ['id', 'team', 'team_name', 'country', 'country_name', 'position', 
                  'played', 'won', 'drawn', 'lost', 'goals_for', 'goals_against', 
                  'goal_difference', 'points', 'recent_form']

class MatchReviewSerializer(serializers.ModelSerializer):
    thumbnail_url = serializers.SerializerMethodField()
    video_url = serializers.SerializerMethodField()
    
    class Meta:
        model = MatchReview
        fields = ['id', 'name', 'thumbnail_url', 'video_url']
    
    def get_thumbnail_url(self, obj):
        request = self.context.get('request')
        if request:
            return request.build_absolute_uri(obj.thumbnail_url)
        return obj.thumbnail_url
    
    def get_video_url(self, obj):
        request = self.context.get('request')
        if request:
            return request.build_absolute_uri(obj.video_url)
        return obj.video_url