import { defineConfig } from 'vite';
import path from 'path';

export default defineConfig({
    define: {
        'process.env.NODE_ENV': JSON.stringify('production'),
    },

    build: {
        // 라이브러리 모드 설정
        lib: {
            entry: path.resolve(__dirname, 'resources/js/index.ts'),
            name: 'SirsoftEcommerce', // 전역 변수명 (IIFE 모드용)
            fileName: 'module',
            formats: ['iife'], // IIFE 포맷만 빌드
        },

        // 빌드 출력 설정
        outDir: 'dist',
        emptyOutDir: true,

        // 소스맵 생성
        // 배포용 빌드(--production)는 G7_BUILD_SOURCEMAP=0 을 주입해 소스맵을 생성하지 않는다.
        // 미설정(로컬 npm run build)이면 생성 — 개발 디버깅 경험을 유지한다.
        sourcemap: !['0', 'false'].includes(process.env.G7_BUILD_SOURCEMAP ?? ''),

        rollupOptions: {
            output: {
                // 에셋 파일명 패턴
                assetFileNames: (assetInfo) => {
                    // CSS 파일
                    if (assetInfo.name?.endsWith('.css')) {
                        return 'css/module[extname]';
                    }
                    // 폰트 파일
                    if (assetInfo.name?.match(/\.(woff|woff2|eot|ttf|otf)$/)) {
                        return 'assets/fonts/[name][extname]';
                    }
                    // 이미지 파일
                    if (assetInfo.name?.match(/\.(png|jpg|jpeg|gif|svg|webp)$/)) {
                        return 'assets/images/[name][extname]';
                    }
                    return 'assets/[name][extname]';
                },

                // JS 파일명 패턴
                entryFileNames: 'js/module.iife.js',
                chunkFileNames: 'js/[name]-[hash].js',
            },
        },

        // 빌드 최적화
        minify: 'esbuild',
        target: 'es2020',

        // Chunk 크기 경고 임계값
        chunkSizeWarningLimit: 500,
    },

    // 타입스크립트 설정
    resolve: {
        alias: {
            '@': path.resolve(__dirname, 'resources/js'),
        },
    },
});
