/**
 * @web/loader
 * 极简模块调度中心
 */

const DEFAULT_VERSIONS = {
    'state': 'v1.0.11',
    'bootstrap': 'v1.0.1',
    'base': 'v1.0.7',
    'dataTable': 'v1.0.6',
    'kanban': 'v1.0.0',
    'mindmap': 'v1.0.0',
    'chart': 'v1.0.0'
};

const Loader = {
    /**
     * 加载指定模块并注入 importmap
     * @param {...string} pkgs 模块名格式: 'name' 或 'name:version'
     */
    load: (...pkgs) => {
        if (typeof document === 'undefined') return;

        const currentScript = document.currentScript;
        const currentUrl = currentScript ? currentScript.src : '';
        
        // 解析 URL 模板
        // 假设当前 URL 是 https://apigo.cc/web/loader/raw/tag/v1.0.0/dist/loader.min.js
        // 目标模板 https://apigo.cc/web/{project}/raw/tag/{tag}/dist/{project}.js
        let tpl = 'https://apigo.cc/web/{project}/raw/tag/{tag}/dist/{project}.js';
        
        if (currentUrl.includes('/loader/')) {
            // 自动推断基础路径和 tag
            const match = currentUrl.match(/(.*\/web\/)loader\/raw\/tag\/([^\/]+)\//);
            if (match) {
                const baseUrl = match[1];
                const loaderTag = match[2];
                tpl = `${baseUrl}{project}/raw/tag/{tag}/dist/{project}.js`;
                // 默认情况下其他库也使用和 loader 相同的 tag，除非另有定义
                Object.keys(DEFAULT_VERSIONS).forEach(k => {
                    if (DEFAULT_VERSIONS[k] === 'v1.0.0') DEFAULT_VERSIONS[k] = loaderTag;
                });
            }
        }

        const importMap = { imports: {} };

        pkgs.forEach(pkg => {
            let [name, version] = pkg.split(':');
            version = version || DEFAULT_VERSIONS[name] || 'main';
            
            const url = tpl.replace(/{project}/g, name).replace(/{tag}/g, version);
            importMap.imports[`@web/${name}`] = url;
            
            // 特殊处理：如果是 bootstrap，可能需要额外处理或依赖
            if (name === 'bootstrap') {
                // bootstrap 内部现在是自包含的，直接映射即可
            }
        });

        const script = document.createElement('script');
        script.type = 'importmap';
        script.textContent = JSON.stringify(importMap);
        
        if (currentScript) {
            currentScript.parentNode.insertBefore(script, currentScript);
        } else {
            document.head.appendChild(script);
        }
    }
};

// 挂载到全局
globalThis.Loader = Loader;

export { Loader };
export default Loader;
