import type { ForgeConfig } from '@electron-forge/shared-types'
// import { MakerSquirrel } from '@electron-forge/maker-squirrel';
import { MakerZIP } from '@electron-forge/maker-zip'
// import { MakerDeb } from '@electron-forge/maker-deb';
// import { MakerRpm } from '@electron-forge/maker-rpm';
import { MakerDMG } from '@electron-forge/maker-dmg'
import { VitePlugin } from '@electron-forge/plugin-vite'
import { FusesPlugin } from '@electron-forge/plugin-fuses'
import { FuseV1Options, FuseVersion } from '@electron/fuses'
import { getPlatform } from './getPlatform'

const config: ForgeConfig = {
    packagerConfig: {
        asar: true,
        // extraResource: [`src/bin/${getPlatform().platform}-${getPlatform().arch}/devon_agent`],
    },
    rebuildConfig: {},
    makers: [
        // new MakerSquirrel({}),
        new MakerZIP({}, ['darwin']),
        new MakerDMG({
            format: 'ULFO',
        }),
        //  new MakerRpm({}), new MakerDeb({})
    ],
    plugins: [
        new VitePlugin({
            // `build` can specify multiple entry builds, which can be Main process, Preload scripts, Worker process, etc.
            // If you are familiar with Vite configuration, it will look really familiar.
            build: [
                {
                    // `entry` is just an alias for `build.lib.entry` in the corresponding file of `config`.
                    entry: 'src/backend/main.ts',
                    config: 'vite.main.config.mts',
                },
                {
                    entry: 'src/backend/cli.ts',
                    config: 'vite.main.config.mts',
                },
                {
                    entry: 'src/backend/preload.ts',
                    config: 'vite.preload.config.ts',
                },
            ],
            renderer: [
                {
                    name: 'main_window',
                    config: 'vite.renderer.config.ts',
                },
            ],
        }),
        // Fuses are used to enable/disable various Electron functionality
        // at package time, before code signing the application
        new FusesPlugin({
            version: FuseVersion.V1,
            [FuseV1Options.RunAsNode]: false,
            [FuseV1Options.EnableCookieEncryption]: true,
            [FuseV1Options.EnableNodeOptionsEnvironmentVariable]: false,
            [FuseV1Options.EnableNodeCliInspectArguments]: false,
            [FuseV1Options.EnableEmbeddedAsarIntegrityValidation]: true,
            [FuseV1Options.OnlyLoadAppFromAsar]: true,
        }),
    ],
}

export default config
