from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from .models import db

# 导出数据库实例
from .models import db

# 导出所有模型类（从 models.py 兼容层导入，保持向后兼容）
from .models import (
    # 用户相关
    User,
    UserSession,
    Permission,
    Role,
    # 题目相关
    ChallengeRecord,
    # 部署相关
    DeploymentRecord,
    # 系统配置
    SystemConfig,
    # Augment配置
    AugmentSessionToken,
    # AnyRouter Token
    AnyRouterToken,
    # AgentRouter Token
    AgentRouterToken,
    # 方向配置相关
    CategoryConfig,
    CategoryAdmin
)

# AI 提供商配置
from .ai_provider import (
    AIProviderType,
    AIProviderConfig,
    SystemAIConfig
)

# CLI Token 统一模型
# CLIToken 已移除，统一使用 AIProviderConfig

# 导出管理类
from .operations import ChallengeManager

# 兼容性导出
from .operations import (
    save_challenge_record,
    get_challenge_record,
    get_challenge_by_name,
    get_latest_challenge,
    list_challenges,
    delete_challenge,
    update_challenge
)

__all__ = [
    'db',
    # 用户相关
    'User', 'UserSession', 'Permission', 'Role',
    # 题目相关
    'ChallengeRecord',
    # 部署相关
    'DeploymentRecord',
    # 系统配置
    'SystemConfig',
    # Augment配置
    'AugmentSessionToken',
    # AnyRouter Token
    'AnyRouterToken',
    # AgentRouter Token
    'AgentRouterToken',
    # 方向配置相关
    'CategoryConfig', 'CategoryAdmin',
    # AI 提供商配置
    'AIProviderType', 'AIProviderConfig', 'SystemAIConfig',
    # 管理类
    'ChallengeManager',
    # 兼容性函数
    'save_challenge_record', 'get_challenge_record', 'get_challenge_by_name',
    'get_latest_challenge', 'list_challenges', 'delete_challenge', 'update_challenge'
]

def init_db(app: Flask):
    """初始化数据库"""
    # 数据库配置已经在 Config 中设置，不需要在这里覆盖
    # app.config['SQLALCHEMY_DATABASE_URI'] 已经由 app.config.from_object(Config) 设置

    # 初始化数据库
    db.init_app(app)

    # 创建所有表（仅在需要时）
    with app.app_context():
        db.create_all()

    return db