#!/usr/bin/env python3
"""
使用公网数据库的启动脚本
"""
import os
import sys
import asyncio
from pathlib import Path

# 设置环境变量 - 使用公网MySQL数据库
# 数据库信息：
# 主机: 120.79.247.16 或 aiedu.ireborn.com.cn
# 端口: 3306
# 数据库名: kaopeilian
# 用户: root
# 密码: Kaopeilian2025!@# (URL编码后: Kaopeilian2025%21%40%23)
os.environ["DATABASE_URL"] = "mysql+aiomysql://root:Kaopeilian2025%21%40%23@120.79.247.16:3306/kaopeilian?charset=utf8mb4"
os.environ["SECRET_KEY"] = "dev-secret-key-for-testing-only-not-for-production"
os.environ["DEBUG"] = "true"
os.environ["LOG_LEVEL"] = "INFO"
os.environ["LOG_FORMAT"] = "console"
os.environ["REDIS_URL"] = "redis://localhost:6379/0"

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

async def test_connection():
    """测试数据库连接"""
    try:
        from app.config.database import engine
        from sqlalchemy import text
        
        print("📡 正在连接到公网数据库...")
        
        async with engine.begin() as conn:
            result = await conn.execute(text("SELECT VERSION()"))
            version = result.scalar()
            print(f"✅ 成功连接到MySQL: {version}")
            
            # 检查表数量
            result = await conn.execute(text("SHOW TABLES"))
            tables = result.fetchall()
            print(f"✅ 数据库中有 {len(tables)} 个表")
        
        await engine.dispose()
        return True
        
    except Exception as e:
        print(f"❌ 数据库连接失败: {e}")
        return False

async def main():
    """主函数"""
    # 测试数据库连接
    if not await test_connection():
        print("\n⚠️  请检查：")
        print("1. 网络连接是否正常")
        print("2. 数据库服务器是否可访问")
        print("3. 用户名密码是否正确")
        return
    
    print("\n🚀 启动应用服务器...")
    print("访问地址: http://localhost:8000")
    print("API文档: http://localhost:8000/docs")
    print("\n按 Ctrl+C 停止服务器")
    
    # 导入并运行应用
    import uvicorn
    uvicorn.run(
        "app.main:app",
        host="0.0.0.0",
        port=8000,
        reload=True,
        log_config={
            "version": 1,
            "disable_existing_loggers": False,
            "formatters": {
                "default": {
                    "format": "%(asctime)s | %(levelname)s | %(name)s | %(message)s",
                },
            },
            "handlers": {
                "default": {
                    "formatter": "default",
                    "class": "logging.StreamHandler",
                    "stream": "ext://sys.stdout",
                },
            },
            "root": {
                "level": "INFO",
                "handlers": ["default"],
            },
        }
    )

if __name__ == "__main__":
    asyncio.run(main())


