from rest_framework import serializers

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

CDN = "https://footviz-cdn.21729901.xyz/footviz-static"


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 f"{CDN}/{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
        return f"{CDN}/{obj.video_url}"
