# 显式导入所有模型模块,添加新的模型类所在模块(users模块)的导入
from mooc.models.admin import *  # noqa
from mooc.models.account import *  # noqa
from mooc.models.uni_account import *  # noqa
from mooc.models.core import *  # noqa  
from mooc.models.userapi import *  # noqa  
from mooc.models.users import *  # noqa  # 新增导入,确保能识别users.py里的模型类所在模块

# 导出常用的模型类
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
)

from mooc.models.core import (
    CoreAttachment,
    CoreCache,
    CoreCron,
    CoreCronRecord,
    CoreJob,
    CoreMenu,
    CoreMenuShortcut,
    CorePaylog,
    CorePerformance,
    CoreQueue,
    CoreRefundlog,
    CoreResource,
    CoreSendsmsLog,
    CoreSessions,
    CoreSettings
)

from mooc.models.userapi import (
    UserapiCache,
    UserapiReply
)

from mooc.models.users import (
    Users,
    UsersBind,
    UsersCreateGroup,
    UsersGroup,
    UsersInvitation,
    UsersLastUse,
    UsersLoginLogs,
    UsersOperateHistory,
    UsersOperateStar,
    UsersPermission,
    UsersProfile,
    UsersExtraGroup,
    UsersExtraLimit,
    UsersExtraModules,
    UsersExtraTemplates,
    UsersFailedLogin,
    UsersFounderGroup,
    UsersFounderOwnCreateGroups,
    UsersFounderOwnUniGroups,
    UsersFounderOwnUsers,
    UsersFounderOwnUsersGroups
)

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',
        
        # Core 相关表名
        "ims_core_attachment"
        "ims_core_cache",
        "ims_core_cron",
        "ims_core_cron_record",
        "ims_core_job",
        "ims_core_menu",
        "ims_core_menu_shortcut",
        "ims_core_paylog",
        "ims_core_performance",
        "ims_core_queue",
        "ims_core_refundlog",
        "ims_core_resource",
        "ims_core_sendsms_log",
        "ims_core_sessions",
        "ims_core_settings",
        
        # Userapi 相关表名
        "ims_userapi_cache",
        "ims_userapi_reply",
        
        # Users 相关表名
        "ims_users",
        "ims_users_bind",
        "ims_users_create_group",
        "ims_users_group",
        "ims_users_invitation",
        "ims_users_lastuse",
        "ims_users_login_logs",
        "ims_users_operate_history",
        "ims_users_operate_star",
        "ims_users_permission",
        "ims_users_profile",
        "ims_users_extra_group",
        "ims_users_extra_limit",
        "ims_users_extra_modules",
        "ims_users_extra_templates",
        "ims_users_failed_login",
        "ims_users_founder_group",
        "ims_users_founder_own_create_groups",
        "ims_users_founder_own_uni_groups",
        "ims_users_founder_own_users",
        "ims_users_founder_own_users_groups"
    }
    
    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())