#!/usr/bin/env python
"""
检查球员图片和数据资源的可用性
"""

import requests
import json
import os
from pathlib import Path

# Django服务器地址
BASE_URL = "http://127.0.0.1:8000"
API_BASE_URL = f"{BASE_URL}/api"

def check_api_endpoint(endpoint):
    """检查API端点是否可访问"""
    try:
        response = requests.get(f"{API_BASE_URL}/{endpoint}", timeout=10)
        return response.status_code == 200, response.status_code, response.json() if response.status_code == 200 else None
    except Exception as e:
        return False, str(e), None

def check_media_file(file_path):
    """检查媒体文件是否可访问"""
    try:
        response = requests.get(f"{BASE_URL}{file_path}", timeout=10)
        return response.status_code == 200, response.status_code
    except Exception as e:
        return False, str(e)

def main():
    print("开始检查球员资源可用性...\n")
    
    # 1. 检查API端点
    print("1. 检查API端点:")
    endpoints = ["countries/", "teams/", "players/"]
    for endpoint in endpoints:
        success, status, data = check_api_endpoint(endpoint)
        if success:
            print(f"   ✓ {endpoint} - 状态码: {status}")
            if data and 'results' in data:
                print(f"     数据条目数: {len(data['results'])}")
        else:
            print(f"   ✗ {endpoint} - 错误: {status}")
    print()
    
    # 2. 获取一些测试数据
    print("2. 获取测试数据:")
    success, status, countries_data = check_api_endpoint("countries/")
    if not success:
        print("   无法获取国家数据，终止检查")
        return
        
    if not countries_data or 'results' not in countries_data or not countries_data['results']:
        print("   没有国家数据，终止检查")
        return
        
    country_id = countries_data['results'][0]['id']
    print(f"   使用国家ID: {country_id}")
    
    # 获取球队数据
    success, status, teams_data = check_api_endpoint(f"teams/?country={country_id}")
    if not success or not teams_data or 'results' not in teams_data or not teams_data['results']:
        print("   无法获取球队数据，终止检查")
        return
        
    team = teams_data['results'][0]
    team_id = team['id']
    team_name = team['name']
    print(f"   使用球队: {team_name} (ID: {team_id})")
    
    # 获取球员数据
    success, status, players_data = check_api_endpoint(f"players/?team={team_id}")
    if not success or not players_data or 'results' not in players_data or not players_data['results']:
        print("   无法获取球员数据，终止检查")
        return
        
    print(f"   球员数量: {len(players_data['results'])}")
    print()
    
    # 3. 检查球员图片
    print("3. 检查球员图片:")
    missing_images = 0
    total_images = 0
    
    # 获取实际存在的图片文件列表
    image_dir = f"media/team_player_images/{team_name}"
    existing_images = set()
    if os.path.exists(image_dir):
        for file in os.listdir(image_dir):
            if file.endswith('.jpg'):
                existing_images.add(file)
    
    print(f"   球队图片目录中实际存在的图片数量: {len(existing_images)}")
    
    for player in players_data['results'][:10]:  # 只检查前10个球员
        player_name = player['name']
        # 构建图片路径 - 需要处理特殊字符
        image_name = player_name.replace(' ', '_')
        # 尝试不同的编码方式
        possible_names = [
            f"{image_name}.jpg",
            f"{image_name.replace('é', '├⌐')}.jpg",
            f"{image_name.replace('é', '├®')}.jpg",
            f"{image_name.replace('é', 'e')}.jpg",
            f"{image_name.replace('ø', '├╕')}.jpg",
            f"{image_name.replace('ø', 'o')}.jpg",
            f"{image_name.replace('ñ', '├▒')}.jpg",
            f"{image_name.replace('ñ', 'n')}.jpg",
        ]
        
        total_images += 1
        found = False
        for name in possible_names:
            if name in existing_images:
                image_path = f"/media/team_player_images/{team_name}/{name}"
                success, status = check_media_file(image_path)
                if success:
                    print(f"   ✓ {player_name} - 图片可用 ({name})")
                    found = True
                    break
                else:
                    print(f"   ✗ {player_name} - 图片不可用 ({name}, 状态: {status})")
                    found = True
                    break
        
        if not found:
            missing_images += 1
            print(f"   ✗ {player_name} - 未找到匹配的图片文件")
    
    print(f"\n   图片检查结果: {total_images - missing_images}/{total_images} 张图片可用")
    if missing_images > 0:
        print(f"   缺失图片数量: {missing_images}")
    print()
    
    # 4. 检查球队可视化资源
    print("4. 检查球队可视化资源:")
    visual_files = [
        "age_distribution.png",
        "age_vs_match_played.png", 
        "average_yellow_cards_by_Name.png",
        "average_yellow_cards_by_Nation.png",
        "average_yellow_cards_by_Position.png"
    ]
    
    missing_visuals = 0
    total_visuals = len(visual_files)
    
    for visual_file in visual_files:
        visual_path = f"/media/team-visuals/{team_name}/{visual_file}"
        success, status = check_media_file(visual_path)
        if success:
            print(f"   ✓ {visual_file} - 可用")
        else:
            missing_visuals += 1
            print(f"   ✗ {visual_file} - 不可用 (状态: {status})")
    
    print(f"\n   可视化资源检查结果: {total_visuals - missing_visuals}/{total_visuals} 个文件可用")
    if missing_visuals > 0:
        print(f"   缺失文件数量: {missing_visuals}")

if __name__ == "__main__":
    main()