import rxInitData from "@/utils/database/rxInitData";
import { Collection as Setting, SettingNames } from "@/core/setting/collections";
import initDocsData from "@/utils/database/rxInitData/initDocsData";
import requirePlugins from "@/utils/scripts/requirePlugins";
import rxDb from "@/utils/database/rxConnect";
import { Primary as AuthPrimary } from "@/core/auth/schema";
import { ENV } from "@/utils/config";
export default async function initData() {
    const db = await rxDb();
    // Init Core Setting Data
    await rxInitData({
        db,
        collection: Setting.name,
        name: SettingNames.init_status,
        initFunc: () => initDocsData({
            db,
            collection: Setting.name,
            docsData: [
                {
                    name: SettingNames.i18n_code,
                    value: ENV.I18N_CODE
                },
                {
                    name: AuthPrimary,
                    value: undefined
                },
                {
                    name: SettingNames.role,
                    value: undefined
                },
                {
                    name: SettingNames.site_name,
                    value: undefined
                },
                {
                    name: SettingNames.theme,
                    value: undefined
                }
            ]
        })
    });
    // Init Auth Plugin Data
    try {
        // @ts-ignore
        let { initData: authInitData } = await import(`bunadmin-plugin-auth`);
        initData && (await initPluginData(db, authInitData));
    }
    catch (e) {
        console.warn("initData required 'bunadmin-plugin-auth'");
    }
    // Init Plugins Data
    const pluginsData = require("@plugins/pluginsData");
    pluginsData.map(async (path) => {
        const fileContent = requirePlugins(path);
        if (!fileContent)
            return;
        const initData = fileContent.default;
        await initPluginData(db, initData);
    });
}
async function initPluginData(db, initData) {
    await rxInitData({
        db,
        collection: Setting.name,
        name: `init-${initData.plugin}`,
        initFunc: async () => {
            // Loop init DocsData
            initData.list.map(async (item) => {
                await initDocsData({
                    db,
                    collection: item.name,
                    docsData: item.data
                });
            });
        }
    });
}
