import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
import html from '@rollup/plugin-html';
import { glob } from 'glob';

/**
 * Get Files from a directory
 * @param {string} query
 * @returns array
 */
function GetFilesArray(query) {
    return glob.sync(query);
}
/**
 * Js Files
 */
// Processing Modules JS Files
const ModulesJsFiles = GetFilesArray('modules/Admin/Resources/**/*.js');


/**
 * Scss Files
 */
// Processing Libs Scss & Css Files
const ModulesScssFiles = GetFilesArray('modules/Admin/Resources/**/!(_)*.scss');
const ModulesScsFiles = GetFilesArray('modules/Admin/Resources/**/*.css');



// Processing Website Vendor JS Files
const WebVendorJsFiles = GetFilesArray('resources/assets/vendor/**/*.js');

// Processing Website Libs JS Files
const WebJsFiles = GetFilesArray('resources/js/**/*.js');

// Processing Website Core, Themes, Libs Scss & Css Files
const WebVendorScsFiles = GetFilesArray('resources/assets/vendor/**/*.css');
const WebScsFiles = GetFilesArray('resources/css/**/*.css');

// Processing Window Assignment for Libs like jKanban, pdfMake
function libsWindowAssignment() {
    return {
        name: 'libsWindowAssignment',

        transform(src, id) {
            if (id.includes('jkanban.js')) {
                return src.replace('this.jKanban', 'window.jKanban');
            } else if (id.includes('vfs_fonts')) {
                return src.replaceAll('this.pdfMake', 'window.pdfMake');
            }
        }
    };
}

export default defineConfig({
    plugins: [
        laravel({
            input: [
                ...ModulesJsFiles,
                ...ModulesScssFiles,
                ...ModulesScsFiles,
                ...WebVendorJsFiles,
                ...WebJsFiles,
                ...WebVendorScsFiles,
                ...WebScsFiles
            ],
            refresh: ['resources/**', 'routes/**', 'app/**', 'modules/**']
        }),
        html(),
        libsWindowAssignment()
    ],
    resolve: {
        alias: {
            '@admin': '/Modules/Admin/Resources'
        }
    },
    server: {
        watch: {
            //ignored: ['!**/modules/**'],
            usePolling: true,
            interval: 300
        }
    }
});