/** @type {import('next').NextConfig} */

const { buildSecurityHeaders, normalizeAssetPrefix } = require('../../config/nextSecurityHeaders')

const CARPLACE_ASSET_PREFIX = '/carplace'
// In local development the homepage app serves /carplace from port 3000 while
// the Carplace dev server runs on port 3004. Emit absolute chunk/HMR URLs so
// the browser asks the Carplace server for its own assets instead of the
// homepage server.
const defaultCarplaceAssetPrefix = process.env.NODE_ENV !== 'production'
  ? 'http://localhost:3004'
  : CARPLACE_ASSET_PREFIX
const carplaceAssetPrefix = normalizeAssetPrefix(
  process.env.CARPLACE_ASSET_PREFIX ?? defaultCarplaceAssetPrefix,
  CARPLACE_ASSET_PREFIX,
)
const securityHeaders = buildSecurityHeaders({ assetSources: [carplaceAssetPrefix] })

const nextConfig = {
  ...(carplaceAssetPrefix ? { assetPrefix: carplaceAssetPrefix } : {}),
  images: {
    remotePatterns: [{ protocol: 'https', hostname: 'res.cloudinary.com' }],
  },
  transpilePackages: ['@rentaldrivego/types'],
  async headers() {
    return [{ source: '/:path*', headers: securityHeaders }]
  },
  async rewrites() {
    const apiOrigin = (process.env.API_INTERNAL_URL ?? process.env.API_URL ?? 'http://api:4000').replace(/\/api\/v1\/?$/, '')

    return {
      beforeFiles: [
        { source: '/carplace/api/:path*', destination: `${apiOrigin}/api/:path*` },
      ],
      afterFiles: [
        { source: '/carplace', destination: '/' },
        { source: '/carplace/:path*', destination: '/:path*' },
      ],
      fallback: [],
    }
  },
}

module.exports = nextConfig
