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

/**
 * Obtener archivos desde el componente local
 */
function GetFilesArray(query) {
    return glob.sync(query);
}

function getComponentFiles(type) {
    return glob.sync(`vendor/koneko/**/resources/${type}/**/*.${type === 'js' ? 'js' : 'scss'}`);
}

// Processing Vendor JS Files
const vendorJsFiles = GetFilesArray('vendor/koneko/laravel-vuexy-admin/resources/assets/vendor/js/*.js');

// Processing Libs JS Files
const LibsJsFiles = GetFilesArray('vendor/koneko/laravel-vuexy-admin/resources/assets/vendor/libs/**/*.js');

// Processing Core, Themes & Pages Scss Files
const CoreScssFiles = GetFilesArray('vendor/koneko/laravel-vuexy-admin/resources/assets/vendor/scss/**/!(_)*.scss');

// Processing Libs Scss & Css Files
const LibsScssFiles = GetFilesArray('vendor/koneko/laravel-vuexy-admin/resources/assets/vendor/libs/**/!(_)*.scss');
const LibsCssFiles = GetFilesArray('vendor/koneko/laravel-vuexy-admin/resources/assets/vendor/libs/**/*.css');

// Processing Fonts Scss Files
const FontsScssFiles = GetFilesArray('vendor/koneko/laravel-vuexy-admin/resources/assets/vendor/fonts/!(_)*.scss');

// Archivos JS de assets de componentes
const AssetsJsFiles = GetFilesArray('vendor/koneko/**/resources/assets/js/**/*.js');

const pageJsFiles = getComponentFiles('js');
const pageScssFiles = getComponentFiles('scss');


// 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: [
                'vendor/koneko/laravel-vuexy-admin/resources/assets/css/demo.css',
                ...vendorJsFiles,
                ...LibsJsFiles,
                ...CoreScssFiles,
                ...LibsScssFiles,
                ...LibsCssFiles,
                ...FontsScssFiles,
                ...pageJsFiles,
                ...pageScssFiles,
                ...AssetsJsFiles,
            ],
            refresh: [
                'resources/**',
                'app/**',
                'vendor/koneko/**/resources/**',
                'vendor/koneko/**/Livewire/**'
            ]
        }),
        html(),
        libsWindowAssignment(),
    ],
    build: {
        emptyOutDir: true,
        rollupOptions: {
            external: ['axios']
        }
    },
    server: {
        cors: true,
        hmr: {
            host: '127.0.0.1',
        },
        fs: {
            allow: ['..'], // Permitir acceso a directorios superiores
        },
        watch: {
            ignored: [
                //'**/vendor/**',   // Ignorar TODAS las carpetas vendor
                '**/node_modules/**', // Ignorar node_modules tambiƩn
                '**/storage/**',
                '**/public/**'
            ],
        }
    },

});