import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { VitePWA } from 'vite-plugin-pwa'
import { resolve } from 'path' // Добавляем импорт модуля path


export default defineConfig({
  // Базовый путь для всех относительных URL
  base: '/',
  plugins: [
    vue(),
    VitePWA({
      // Опции регистрации сервис-воркера
      registerType: 'autoUpdate', // 'autoUpdate' или 'prompt' для обновления

      // Включаем генерацию манифеста и сервис-воркера
      injectRegister: 'auto', 
      
      // Убираем это объявление, так как оно дублируется
      // manifest: true,
      strategies: 'generateSW',
      
      // Опции для генерации сервис-воркера
      manifestFilename: 'manifest.webmanifest',
      filename: 'sw.js',

      // Конфигурация Workbox (для сервис-воркера)
      workbox: {
        globPatterns: ['**/*.{js,css,html,ico,png,svg,json,vue,txt,woff2}'], // Включаем больше типов файлов для кеширования
        cleanupOutdatedCaches: true, // Автоматически удалять старые кеши
        // runtimeCaching: [ // Пример для кеширования API запросов (пока не нужно, но для будущего)
        //   {
        //     urlPattern: /^https:\/\/api\.example\.com\/.*/i,
        //     handler: 'NetworkFirst',
        //     options: {
        //       cacheName: 'api-cache',
        //       expiration: {
        //         maxEntries: 10,
        //         maxAgeSeconds: 60 * 60 * 24 * 365 // 1 год
        //       },
        //       cacheableResponse: {
        //         statuses: [0, 200]
        //       }
        //     }
        //   }
        // ]
      },

      // Файлы для предварительного кеширования (кроме тех, что попадут через globPatterns)
      // Это важно для основных иконок PWA
      includeAssets: [
        'favicon.svg',
        'apple-touch-icon.png',
        'pwa-192x192.png', // Добавляем PWA иконки
        'pwa-512x512.png' // Если используешь маскируемую иконку
        // Убедись, что все эти файлы есть в папке /public
      ],

      // Конфигурация манифеста PWA
      manifest: {
        id: '/', // ID приложения (можно оставить пустым)
        name: 'DatingApp', // Замени на свое название
        short_name: 'DatingApp', // Короткое имя
        description: 'Find your perfect match with our PWA Dating App!', // Описание
        theme_color: '#ff69b4', // Основной цвет темы (пример)
        background_color: '#ffffff', // Цвет фона для сплэш-экрана на Android
        display: 'standalone', // Или 'fullscreen', 'minimal-ui'
        scope: '/',
        start_url: '/',
        orientation: 'portrait-primary', // Предпочтительная ориентация
        icons: [
          {
            src: 'pwa-192x192.png', // Путь относительно папки public
            sizes: '192x192',
            type: 'image/png'
          },
          {
            src: 'pwa-512x512.png', // Путь относительно папки public
            sizes: '512x512',
            type: 'image/png'
          },
          {
            src: 'pwa-512x512.png', // Маскируемая иконка
            sizes: '512x512',
            type: 'image/png',
            purpose: 'any maskable' // 'any' или 'maskable' или 'any maskable'
          }
          // Ты можешь добавить больше размеров иконок, если нужно
        ]
      },

      // Опции для разработчика (могут быть полезны)
      devOptions: {
        enabled: true, // Включает генерацию SW и манифеста в режиме разработки (для тестирования)
        type: 'module', // Тип генерируемого сервис-воркера в режиме разработки
      }
    })
  ],
  // Добавляем конфигурацию для алиасов
  resolve: {
    alias: {
      '@': resolve(__dirname, 'src'), // Алиас @ указывает на директорию src
    },
  },
  // Конфигурация сервера разработки
  server: {
    host: '0.0.0.0',
    port: 5173, // Убедитесь, что этот порт используется или измените при необходимости
    proxy: {
      // Проксируем запросы /api на ваш бэкенд сервер
      '/api': {
        target: 'http://localhost:5000', // Адрес вашего бэкенд сервера
        changeOrigin: true, // Необходимо для виртуальных хостов
      },
      // Проксируем WebSocket соединения для Socket.IO
      '/socket.io': {
        target: 'http://localhost:5000', // Адрес вашего Socket.IO сервера
        ws: true, // Включаем проксирование WebSocket
        changeOrigin: true,
      }
    }
  },
  // Другие настройки Vite, если они есть (например, server, resolve.alias и т.д.)
  build: {
    // Гарантируем, что сервис-воркер включен
    sourcemap: true,
    assetsInlineLimit: 0,
  }
})