# 显式导入所有模型模块
from mooc.models.admin import *  # noqa
from mooc.models.account import *  # noqa
from mooc.models.uni_account import *  # noqa

# 导出常用的模型类
from mooc.models.account import (
    Account,
    AccountWechats,
    AccountAliapp,
    AccountBaiduapp,
    AccountPhoneapp,
    AccountToutiaoapp,
    AccountWebapp,
    AccountWxapp,
    AccountXzapp
)

from mooc.models.uni_account import (
    UniAccount,
    UniAccountExtraModules,
    UniAccountGroup,
    UniAccountMenus,
    UniAccountModules,
    UniAccountModulesShortcut,
    UniAccountUsers,
    UniGroup,
    UniLinkUniacid,
    UniModules,
    UniSettings,
    UniVerifycode
)

def verify_all_models():
    """验证所有模型是否已正确注册到Base.metadata"""
    from mooc.db.database import Base
    
    # 所有预期的表名
    expected_tables = {
        'ims_goouc_fullexam_admin',
        # Account 相关表
        'ims_account',
        'ims_account_aliapp',
        'ims_account_baiduapp',
        'ims_account_phoneapp',
        'ims_account_toutiaoapp',
        'ims_account_webapp',
        'ims_account_wechats',
        'ims_account_wxapp',
        'ims_account_xzapp',
        
        # UniAccount 相关表
        'ims_uni_account',
        'ims_uni_account_extra_modules',
        'ims_uni_account_group',
        'ims_uni_account_menus',
        'ims_uni_account_modules',
        'ims_uni_account_modules_shortcut',
        'ims_uni_account_users',
        'ims_uni_group',
        'ims_uni_link_uniacid',
        'ims_uni_modules',
        'ims_uni_settings',
        'ims_uni_verifycode'
    }
    
    actual_tables = set(Base.metadata.tables.keys())
    missing_tables = expected_tables - actual_tables
    extra_tables = actual_tables - expected_tables
    
    if missing_tables:
        raise RuntimeError(f"Missing tables in metadata: {missing_tables}")
    
    if extra_tables:
        print(f"Warning: Found unexpected tables: {extra_tables}")
    
    return True

def get_all_table_names():
    """获取所有已注册的表名"""
    from mooc.db.database import Base
    return sorted(Base.metadata.tables.keys())