import { defineConfig } from 'vite';
import vituum from 'vituum';
import pug from '@vituum/vite-plugin-pug';
import twig from '@vituum/vite-plugin-twig';
import { resolve } from 'path';
import { glob } from 'glob';
import basicSsl from '@vitejs/plugin-basic-ssl';

// Автоматическое определение входных точек
const getInputFiles = () => {
  const htmlFiles = glob.sync('src/pages/**/*.{html,pug,twig}');
  const jsFiles = glob.sync('src/js/**/*.js');

  const input = {};

  // HTML/PUG/TWIG файлы
  htmlFiles.forEach(file => {
    const name = file
      .replace('src/pages/', '')
      .replace(/\.(html|pug|twig)$/, '');
    input[name] = resolve(__dirname, file);
  });

  // JS файлы
  jsFiles.forEach(file => {
    const name = file.replace('src/js/', '').replace('.js', '');
    input[`js/${name}`] = resolve(__dirname, file);
  });

  return input;
};

export default defineConfig({
  plugins: [
    vituum({
      pages: {
        dir: './src/pages'
      }
    }),

    // Поддержка Pug
    pug({
      root: './src',
      options: {
        pretty: true,
        basedir: './src'
      }
    }),

    // Поддержка Twig
    twig({
      root: './src',
      namespaces: {
        layouts: './src/layouts',
        components: './src/components',
        data: './src/data'
      }
    }),

    // HTTPS для разработки
    basicSsl()
  ],

  // Настройки сервера разработки
  server: {
    host: true,
    port: 3000,
    https: true,
    open: true
  },

  // Настройки сборки
  build: {
    outDir: 'dist',
    assetsDir: 'assets',
    sourcemap: true,
    rollupOptions: {
      input: getInputFiles(),
      output: {
        chunkFileNames: 'assets/js/[name]-[hash].js',
        entryFileNames: 'assets/js/[name]-[hash].js',
        assetFileNames: assetInfo => {
          const info = assetInfo.name.split('.');
          const ext = info[info.length - 1];

          if (/\.(png|jpe?g|svg|gif|tiff|bmp|ico)$/i.test(assetInfo.name)) {
            return `assets/images/[name]-[hash].${ext}`;
          }
          if (/\.(woff2?|eot|ttf|otf)$/i.test(assetInfo.name)) {
            return `assets/fonts/[name]-[hash].${ext}`;
          }
          if (/\.css$/i.test(assetInfo.name)) {
            return `assets/css/[name]-[hash].${ext}`;
          }

          return `assets/[name]-[hash].${ext}`;
        }
      }
    },

    // Минификация
    minify: 'terser',
    terserOptions: {
      compress: {
        drop_console: true,
        drop_debugger: true
      }
    }
  },

  // Настройки CSS
  css: {
    preprocessorOptions: {
      scss: {
        additionalData: `@import "./src/styles/_vars.scss"; @import "./src/styles/_scss";`
      }
    },
    devSourcemap: true
  },

  // Алиасы путей
  resolve: {
    alias: {
      '@': resolve(__dirname, 'src'),
      '@styles': resolve(__dirname, 'src/styles'),
      '@js': resolve(__dirname, 'src/js'),
      '@images': resolve(__dirname, 'src/images'),
      '@components': resolve(__dirname, 'src/components'),
      '@layouts': resolve(__dirname, 'src/layouts'),
      '@data': resolve(__dirname, 'src/data')
    }
  }
});
