#!/usr/bin/env python
"""
根据slug重命名资源文件的脚本
将图片和可视化文件重命名为使用slug而不是display_name
"""

import os
import django
import sys
from pathlib import Path
import shutil

# 添加项目根目录到Python路径
project_root = Path(__file__).resolve().parent
sys.path.insert(0, str(project_root))

# 设置Django环境
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'api.project_config.settings')
django.setup()

from api.models import Player, Team


def rename_player_images_by_slug():
    """
    根据球员slug重命名球员图片文件
    """
    print("根据球员slug重命名球员图片文件...")
    print("=" * 60)
    
    # 处理每个球队的球员图片
    teams = Team.objects.all()
    renamed_count = 0
    
    for team in teams:
        images_dir = project_root / 'media' / 'team_player_images' / team.name
        if not images_dir.exists():
            print(f"跳过球队 '{team.name}': 图片目录不存在")
            continue
            
        print(f"处理球队 '{team.name}':")
        
        # 获取该球队的所有球员
        players = Player.objects.filter(stats__team=team).distinct()
        
        for player in players:
            # 基于原始文件名查找现有文件（使用模糊匹配）
            existing_files = list(images_dir.glob(f"*{player.name.split()[-1]}*.jpg"))  # 按姓氏匹配
            if not existing_files and len(player.name.split()) > 1:
                # 如果按姓氏找不到，尝试按名字匹配
                existing_files = list(images_dir.glob(f"*{player.name.split()[0]}*.jpg"))
            
            if existing_files:
                # 取第一个匹配的文件
                existing_file = existing_files[0]
                
                # 新文件名基于slug
                new_filename = f"{player.slug}.jpg"
                new_path = images_dir / new_filename
                
                # 如果文件名不同，则重命名
                if existing_file.name != new_filename:
                    # 检查目标文件是否已存在
                    if new_path.exists():
                        print(f"  跳过 '{existing_file.name}' -> '{new_filename}' (目标文件已存在)")
                    else:
                        existing_file.rename(new_path)
                        print(f"  重命名 '{existing_file.name}' -> '{new_filename}'")
                        renamed_count += 1
                else:
                    print(f"  ✓ '{new_filename}' 文件名已符合要求")
            else:
                print(f"  ✗ 未找到球员 '{player.name}' 的图片文件")
    
    print("=" * 60)
    print(f"重命名完成，共重命名 {renamed_count} 个文件")


def rename_team_visuals_by_slug():
    """
    根据球队slug重命名球队可视化文件
    """
    print("根据球队slug重命名球队可视化文件...")
    print("=" * 60)
    
    # 处理球队可视化文件
    visuals_dir = project_root / 'media' / 'team-visuals'
    if not visuals_dir.exists():
        print("球队可视化目录不存在")
        return
    
    teams = Team.objects.all()
    renamed_count = 0
    
    for team in teams:
        # 查找基于球队名称的目录
        team_dir = visuals_dir / team.name
        if team_dir.exists():
            # 新目录名基于slug
            new_dirname = team.slug
            new_path = visuals_dir / new_dirname
            
            # 如果目录名不同，则重命名
            if team_dir.name != new_dirname:
                # 检查目标目录是否已存在
                if new_path.exists():
                    print(f"  跳过 '{team_dir.name}' -> '{new_dirname}' (目标目录已存在)")
                else:
                    team_dir.rename(new_path)
                    print(f"  重命名目录 '{team_dir.name}' -> '{new_dirname}'")
                    renamed_count += 1
            else:
                print(f"  ✓ '{new_dirname}' 目录名已符合要求")
        else:
            print(f"  ✗ 未找到球队 '{team.name}' 的可视化目录")
    
    print("=" * 60)
    print(f"重命名完成，共重命名 {renamed_count} 个目录")


def main():
    """
    主函数
    """
    rename_player_images_by_slug()
    rename_team_visuals_by_slug()


if __name__ == "__main__":
    main()