import fs from 'fs';
import vuetify from 'vite-plugin-vuetify'

let https = {}

let transpile = ['vuetify', '@vuepic/vue-datepicker', 'pinia', 'pinia-orm', 'date-fns']

if (!process.env.NUXT_ENV) {
    throw Error('Missing environment file - Run yarn install')
}

if (process.env.NUXT_ENV === 'dev') {
    https = {
        key: fs.readFileSync('env/local.app.opentalent.fr.key'),
        cert: fs.readFileSync('env/local.app.opentalent.fr.crt'),
    }
} else {
    transpile.push('lodash')
}

/**
 * Nuxt configuration
 *
 * @see https://nuxt.com/docs/api/configuration/nuxt-config
 */
export default defineNuxtConfig({
    ssr: true,
    experimental: {
        // Fix the 'Cannot stringify non POJO' bug
        // @see https://github.com/nuxt/nuxt/issues/20787
        renderJsonPayloads: false
    },
    runtimeConfig: {
        // Private config that is only available on the server
        env: '',
        baseUrl: '',
        baseUrlLegacy: '',
        baseUrlAdminLegacy: '',
        baseUrlTypo3: '',
        baseUrlMercure: '',
        supportUrl: '',
        // Config within public will be also exposed to the client
        public: {
            env: '',
            baseUrl: '',
            baseUrlLegacy: '',
            baseUrlAdminLegacy: '',
            baseUrlTypo3: '',
            baseUrlMercure: '',
            supportUrl: '',
        }
    },
    hooks: {
        'builder:watch': console.log,
    },
    app: {
        head: {
            title: 'Opentalent',
            meta: [
                { charset: 'utf-8' },
                { name: 'viewport', content: 'width=device-width, initial-scale=1' },
                { name: 'msapplication-TileColor', content: '#324250' },
                { name: 'msapplication-TileImage', content: '/favicon/mstile-144x144.png' }
            ],
            link: [
                { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' },
                { rel: 'apple-touch-icon-precomposed', sizes: '57x57', href: '/favicon/apple-touch-icon-57x57.png' },
                { rel: 'apple-touch-icon-precomposed', sizes: '114x114', href: '/favicon/apple-touch-icon-114x114.png' },
                { rel: 'apple-touch-icon-precomposed', sizes: '72x72', href: '/favicon/apple-touch-icon-72x72.png' },
                { rel: 'apple-touch-icon-precomposed', sizes: '144x144', href: '/favicon/apple-touch-icon-144x144.png' },
                { rel: 'apple-touch-icon-precomposed', sizes: '120x120', href: '/favicon/apple-touch-icon-120x120.png' },
                { rel: 'apple-touch-icon-precomposed', sizes: '152x152', href: '/favicon/apple-touch-icon-152x152.png' },
                { rel: 'icon', sizes: '32x32', type: 'image/x-icon', href: '/favicon/favicon-32x32.png' },
                { rel: 'icon', sizes: '16x16', type: 'image/x-icon', href: '/favicon/favicon-16x16.png' },
            ]
        }
    },
    css: [
        '@/assets/css/global.scss',
        '@/assets/css/theme.scss',
        '@/assets/css/import.scss',
        '@vuepic/vue-datepicker/dist/main.css'
    ],
    typescript: {
        strict: true
    },
    modules: [
        async (options, nuxt) => {
            nuxt.hooks.hook('vite:extendConfig', config => (config.plugins ?? []).push(
                vuetify()
                //Remplacer par cela quand l'issue https://github.com/vuetifyjs/vuetify-loader/issues/273 sera règlée..
                // voir aussi : https://github.com/nuxt/nuxt/issues/15412 et https://github.com/vuetifyjs/vuetify-loader/issues/290
                // voir aussi : https://github.com/jrutila/nuxt3-vuetify3-bug
                // vuetify({
                //     styles: { configFile: './assets/css/settings.scss' }
                // })
            ) as any );
        },
        [
            '@pinia/nuxt',
            {
                autoImports: [
                    // automatically imports `usePinia()`
                    'defineStore',
                    // automatically imports `usePinia()` as `usePiniaStore()`
                    ['defineStore', 'definePiniaStore'],
                ],
            }
        ],
        '@pinia-orm/nuxt',
        '@nuxtjs/i18n',
        '@nuxt/devtools',
        '@nuxt/image'
    ],
    vite: {
        esbuild: {
            drop: process.env.DEBUG ? [] : ['console', 'debugger'],
            tsconfigRaw: {
                compilerOptions: {
                    experimentalDecorators: true,
                }
            }
        },
        ssr: {
            // with ssr enabled, this config is required to load vuetify properly
            noExternal: ['vuetify']
        },
        server : {
            https,
            //@ts-ignore
            port: 443,
            hmr: {
                protocol: 'wss',
                port: 24678
            }
        }
    },
    // Hide the sourcemaps warnings with vuetify
    // @see https://github.com/vuetifyjs/vuetify-loader/issues/290#issuecomment-1435702713
    sourcemap: {
        server: false,
        client: false,
    },
    i18n: {
        langDir: 'lang',
        lazy: true,
        locales: [
            {
                code: 'en',
                iso: 'en-US',
                file: 'en.json',
                name: 'English'
            },
            {
                code: 'fr',
                iso: 'fr-FR',
                file: 'fr.json',
                name: 'Français'
            }
        ],
        defaultLocale: 'fr',
        detectBrowserLanguage: false,
        vueI18n: './i18n.config.ts'
    },
    image: {
        provider: 'none'
    },
    build: {
        transpile: transpile,
    }
})
