/**
 * 工厂常量配置
 * 统一管理所有弹窗的关键路径和配置信息
 * 后期维护只需修改此配置文件，无需修改代码文件
 */

// 弹窗类型枚举（外部必须使用此枚举值）
const MODAL_TYPES = Object.freeze({
    SKU: 'sku',
    ABOUT: 'about',
    REGION: 'region',
    CATEGORY: 'category'
});

// 私有弹窗配置常量（不对外暴露）
const _MODAL_CONFIG = Object.freeze({
    // SKU定价弹窗
    [MODAL_TYPES.SKU]: {
        htmlFile: 'model/sku-pricing-modal.html',
        jsFile: 'js/sku-pricing-modal/sku-pricing-modal.js',
        modalId: 'skuPricingModal',
        displayName: 'SKU定价弹窗'
    },
    
    // 关于我们弹窗
    [MODAL_TYPES.ABOUT]: {
        htmlFile: 'model/about-modal.html',
        jsFile: 'js/about-modal/about-modal.js',
        modalId: 'aboutModal',
        displayName: '关于我们弹窗'
    },
    
    // 区域定价弹窗
    [MODAL_TYPES.REGION]: {
        htmlFile: 'model/region-pricing-modal.html',
        jsFile: 'js/region-pricing-modal/region-pricing-modal.js',
        modalId: 'regionPricingModal',
        displayName: '区域定价弹窗'
    },

    // 类目选择弹窗
    [MODAL_TYPES.CATEGORY]: {
        htmlFile: 'model/category-modal.html',
        jsFile: 'js/category-modal.js',
        modalId: 'categorySelectionModal',
        displayName: '类目选择弹窗'
    }
});

// 验证配置完整性
function validateModalConfig() {
    const errors = [];
    
    Object.entries(_MODAL_CONFIG).forEach(([key, config]) => {
        if (!config.htmlFile) {
            errors.push(`弹窗 ${key} 缺少 htmlFile 配置`);
        }
        if (!config.jsFile) {
            errors.push(`弹窗 ${key} 缺少 jsFile 配置`);
        }
        if (!config.modalId) {
            errors.push(`弹窗 ${key} 缺少 modalId 配置`);
        }
    });
    
    if (errors.length > 0) {
        console.error('弹窗配置验证失败:', errors);
        return false;
    }
    
    console.log('弹窗配置验证通过');
    return true;
}

// 获取弹窗配置（必须使用MODAL_TYPES枚举值）
function getModalConfig(modalType) {
    // 验证参数是否为有效的枚举值
    if (!Object.values(MODAL_TYPES).includes(modalType)) {
        console.error(`无效的弹窗类型: ${modalType}，必须使用MODAL_TYPES枚举值`);
        return null;
    }
    
    const config = _MODAL_CONFIG[modalType];
    if (!config) {
        console.error(`未找到弹窗配置: ${modalType}`);
        return null;
    }
    return config;
}

// 获取所有弹窗配置（返回只读副本）
function getAllModalConfigs() {
    return Object.freeze({..._MODAL_CONFIG});
}

// 检查弹窗是否存在（必须使用MODAL_TYPES枚举值）
function hasModal(modalType) {
    // 验证参数是否为有效的枚举值
    if (!Object.values(MODAL_TYPES).includes(modalType)) {
        console.error(`无效的弹窗类型: ${modalType}，必须使用MODAL_TYPES枚举值`);
        return false;
    }
    
    return modalType in _MODAL_CONFIG;
}

// 获取所有可用的弹窗类型枚举值
function getAvailableModalTypes() {
    return Object.freeze({...MODAL_TYPES});
}

// 导出配置（不暴露私有配置）
window.FactoryConfig = {
    MODAL_TYPES,
    validateModalConfig,
    getModalConfig,
    getAllModalConfigs,
    hasModal,
    getAvailableModalTypes
};

// 自动验证配置
if (typeof window !== 'undefined') {
    window.addEventListener('DOMContentLoaded', () => {
        validateModalConfig();
    });
}