# 显式导入所有模型模块,添加新的模型类所在模块(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 (
    ImsCoreCache,
    ImsCoreCron,
    ImsCoreCronRecord,
    ImsCoreJob,
    ImsCoreMenu,
    ImsCoreMenuShortcut,
    ImsCorePaylog,
    ImsCorePerformance,
    ImsCoreQueue,
    ImsCoreRefundlog,
    ImsCoreResource,
    ImsCoreSendsmsLog,
    ImsCoreSessions,
    ImsCoreSettings
)

from mooc.models.userapi import (
    ImsUserapiCache,
    ImsUserapiReply
)

from mooc.models.users import (
    ImsUsers,
    ImsUsersBind,
    ImsUsersCreateGroup,
    ImsUsersGroup,
    ImsUsersInvitation,
    ImsUsersLastUse,
    ImsUsersLoginLogs,
    ImsUsersOperateHistory,
    ImsUsersOperateStar,
    ImsUsersPermission,
    ImsUsersProfile,
    ImsUsersExtraGroup,
    ImsUsersExtraLimit,
    ImsUsersExtraModules,
    ImsUsersExtraTemplates,
    ImsUsersFailedLogin,
    ImsUsersFounderGroup,
    ImsUsersFounderOwnCreateGroups,
    ImsUsersFounderOwnUniGroups,
    ImsUsersFounderOwnUsers,
    ImsUsersFounderOwnUsersGroups
)

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',
        
        # ImsCore 相关表名
        "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",
        
        # ImsUserapi 相关表名
        "ims_userapi_cache",
        "ims_userapi_reply",
        
        # ImsUsers 相关表名
        "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())