"""
MYSQL_HOST=xxx
MYSQL_USERNAME=xxx
MYSQL_PASSWORD=xxx
MYSQL_DATABASE=xxx
MYSQL_PORT=xxx

以上环境变量已配置在 .env 中。

我要导出一个数据表的某些记录  并添加一些字段。

表名:vala_resource_base

过滤全部 type == "角色" 的记录

导出以下字段:
id 
cn_name
en_name


最终输出到 excel文档。  "角色资源导出_251031.xlsx"

"""

import os
import pandas as pd
import pymysql
from dotenv import load_dotenv
from datetime import datetime

def load_config():
    """加载环境变量配置"""
    load_dotenv()
    
    config = {
        'host': os.getenv('MYSQL_HOST'),
        'user': os.getenv('MYSQL_USERNAME'),
        'password': os.getenv('MYSQL_PASSWORD'),
        'database': os.getenv('MYSQL_DATABASE'),
        'port': int(os.getenv('MYSQL_PORT', 3306)),
        'charset': 'utf8mb4'
    }
    
    # 验证配置
    for key, value in config.items():
        if value is None and key != 'charset':
            raise ValueError(f"环境变量 {key} 未配置")
    
    return config

def connect_mysql(config):
    """连接MySQL数据库"""
    try:
        connection = pymysql.connect(**config)
        print("MySQL数据库连接成功")
        return connection
    except Exception as e:
        print(f"MySQL数据库连接失败: {e}")
        raise

def export_role_resources():
    """导出角色资源数据"""
    try:
        # 加载配置
        config = load_config()
        
        # 连接数据库
        connection = connect_mysql(config)
        
        # SQL查询语句
        sql = """
        SELECT 
            id,
            cn_name,
            en_name
        FROM vala_resource_base 
        WHERE type = '角色'
        ORDER BY id
        """
        
        print("开始查询数据...")
        
        # 执行查询并获取数据
        df = pd.read_sql(sql, connection)
        
        print(f"查询到 {len(df)} 条记录")
        
        # 关闭数据库连接
        connection.close()
        
        # 导出到Excel文件
        output_filename = "角色资源导出_251031.xlsx"
        df.to_excel(output_filename, index=False, engine='openpyxl')
        
        print(f"数据已成功导出到: {output_filename}")
        print(f"导出字段: {list(df.columns)}")
        print(f"导出记录数: {len(df)}")
        
        # 显示前几行数据预览
        if len(df) > 0:
            print("\n数据预览:")
            print(df.head())
        
        return output_filename
        
    except Exception as e:
        print(f"导出过程中发生错误: {e}")
        raise

if __name__ == "__main__":
    try:
        print("开始导出角色资源数据...")
        print(f"执行时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
        
        output_file = export_role_resources()
        
        print(f"\n✅ 导出完成! 文件保存为: {output_file}")
        
    except Exception as e:
        print(f"\n❌ 导出失败: {e}")
