import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import sharedConfig from '../shared/vite.config.js'
import fs from 'node:fs'
import path from 'node:path'

export default defineConfig({
  ...sharedConfig,
  resolve: {
      alias: {
          '@': fileURLToPath(new URL('./src', import.meta.url)),
          '@shared': fileURLToPath(new URL('../shared', import.meta.url)),
      },
  },
  plugins: [
      ...sharedConfig.plugins,
      {
          name: 'serve-drops',
          configureServer(server) {
              server.middlewares.use((req, res, next) => {
                  // Check if the request is for a drop
                  if (req.url?.startsWith('/drops/')) {
                      let filePath = path.join(
                          fileURLToPath(new URL('./public', import.meta.url)),
                          req.url.split('?')[0]  // Remove query params
                      )

                      // Check if the path exists
                      if (fs.existsSync(filePath)) {
                          // If it's a directory, append index.html
                          const stats = fs.statSync(filePath)
                          if (stats.isDirectory()) {
                              filePath = path.join(filePath, 'index.html')
                              if (!fs.existsSync(filePath)) {
                                  return next()
                              }
                          }

                          // Determine content type
                          let contentType = 'text/html'
                          if (filePath.endsWith('.js')) {
                              contentType = 'application/javascript'
                          } else if (filePath.endsWith('.css')) {
                              contentType = 'text/css'
                          } else if (filePath.endsWith('.json')) {
                              contentType = 'application/json'
                          } else if (filePath.endsWith('.png')) {
                              contentType = 'image/png'
                          } else if (filePath.endsWith('.woff') || filePath.endsWith('.woff2')) {
                              contentType = 'font/woff' + (filePath.endsWith('.woff2') ? '2' : '')
                          }

                          // Read and serve the file
                          const content = fs.readFileSync(filePath)
                          res.setHeader('Content-Type', contentType)
                          res.end(content)
                          return
                      }
                  }
                  next()
              })
          },
      },
  ],
})
