"""
生成完整的weights_config.yaml配置文件
"""
from src.data_provider import DataQueryAPI
import yaml
import random

def generate_weights_config():
    """生成完整的权重配置文件"""
    api = DataQueryAPI()
    
    # 获取所有数据
    jobs = api.get_all_jobs()
    races = api.get_all_races()
    chess = api.get_all_chess()
    
    # 生成配置字典
    config = {
        "base_weights": {
            "synergy_level_weight": 1.0,
            "synergy_count_weight": 0.5,
            "chess_cost_weight": 0.1
        },
        "synergy_weights": {},
        "chess_weights": {},
        "cost_weights": {
            "1": 1.0,
            "2": 1.2,
            "3": 1.5,
            "4": 1.8,
            "5": 2.0
        },
        "synergy_level_weights": {
            "1": 1.0,
            "2": 1.2,
            "3": 1.5,
            "4": 1.8,
            "5": 2.0,
            "6": 2.3,
            "7": 2.6,
            "8": 3.0,
            "9": 3.3,
            "10": 3.5
        }
    }
    
    # 添加职业羁绊权重
    for job in jobs:
        # 根据职业类型设置不同的基础权重
        base_weight = round(random.uniform(1.0, 1.6), 1)
        # 对于一些特殊职业进行调整
        if job['name'] == '召唤物':
            base_weight = 0.7
        elif job['name'] in ['重装战士', '高级工程师', '斗士']:
            base_weight = 1.5
        elif job['name'] in ['堡垒卫士', '强袭射手']:
            base_weight = 1.4
        
        config["synergy_weights"][job['name']] = base_weight
    
    # 添加特质羁绊权重
    for race in races:
        # 根据特质类型设置不同的基础权重
        base_weight = round(random.uniform(1.0, 1.6), 1)
        # 对于一些特殊特质进行调整
        if race['name'] in ['弑魂者', '网络之神', '鳄霸']:
            base_weight = 1.6
        elif race['name'] in ['圣灵使者', '源计划']:
            base_weight = 1.5
        
        config["synergy_weights"][race['name']] = base_weight
    
    # 添加棋子权重
    for c in chess:
        if c.get('price') == '0':
            # 召唤物权重较低
            config["chess_weights"][c['displayName']] = 0.8
        else:
            # 根据费用调整权重基础值
            cost = int(c.get('price', '1'))
            base_weight = 1.0 + (cost - 1) * 0.1
            # 对于一些特殊棋子进行调整
            if c['displayName'] in ['佛耶戈', '扎克', '盖伦', '阿萝拉']:
                base_weight = 1.7
            elif c['displayName'] in ['薇恩', '赛娜', '金克丝', '布兰德']:
                base_weight = 1.5
            
            config["chess_weights"][c['displayName']] = round(base_weight, 1)
    
    # 将配置写入YAML文件
    with open('data/weights_config.yaml', 'w', encoding='utf-8') as f:
        # 添加注释
        f.write("# 云顶之弈阵容评分权重配置文件\n\n")
        
        # 写入基础权重配置
        f.write("# 基础权重配置\n")
        yaml.dump({"base_weights": config["base_weights"]}, f, allow_unicode=True, sort_keys=False)
        
        # 写入羁绊权重配置
        f.write("\n# 羁绊权重配置(值越大,该羁绊在评分中的权重越高)\n")
        f.write("synergy_weights:\n")
        
        # 先写入职业羁绊
        f.write("  # 职业羁绊\n")
        for job in sorted(jobs, key=lambda x: x['name']):
            f.write(f"  {job['name']}: {config['synergy_weights'][job['name']]}\n")
        
        # 再写入特质羁绊
        f.write("\n  # 特质羁绊\n")
        for race in sorted(races, key=lambda x: x['name']):
            f.write(f"  {race['name']}: {config['synergy_weights'][race['name']]}\n")
        
        # 写入棋子费用等级权重
        f.write("\n# 棋子费用等级权重(费用越高权重越大)\n")
        yaml.dump({"cost_weights": config["cost_weights"]}, f, allow_unicode=True, sort_keys=False)
        
        # 写入棋子权重配置
        f.write("\n# 棋子权重配置(值越大,该棋子在评分中的权重越高)\n")
        f.write("chess_weights:\n")
        for c_name, c_weight in sorted(config["chess_weights"].items()):
            f.write(f"  {c_name}: {c_weight}\n")
        
        # 写入羁绊等级权重
        f.write("\n# 羁绊等级权重(不同等级的羁绊权重不同)\n")
        yaml.dump({"synergy_level_weights": config["synergy_level_weights"]}, f, allow_unicode=True, sort_keys=False)
    
    print(f"已生成权重配置文件: data/weights_config.yaml")
    print(f"职业羁绊: {len(jobs)}个")
    print(f"特质羁绊: {len(races)}个")
    print(f"棋子: {len(chess)}个")

if __name__ == "__main__":
    generate_weights_config()