import type { NextConfig } from 'next'
import path from 'path'
import { withPayload } from '@payloadcms/next/withPayload'
import redirects from './redirects.js'

const NEXT_PUBLIC_SERVER_URL = process.env.VERCEL_PROJECT_PRODUCTION_URL
  ? `https://${process.env.VERCEL_PROJECT_PRODUCTION_URL}`
  : process.env.__NEXT_PRIVATE_ORIGIN || 'http://localhost:3000'

const GCS_PUBLIC_URL =
  process.env.NEXT_PUBLIC_GOOGLE_STORAGE_URL || 'https://storage.googleapis.com'

const cwd = process.cwd()
const remotePatterns = [NEXT_PUBLIC_SERVER_URL, GCS_PUBLIC_URL].map((item) => {
  const url = new URL(item)

  return {
    hostname: url.hostname,
    protocol: url.protocol.replace(':', '') as 'http' | 'https',
  }
})

const nextConfig: NextConfig = {
  images: {
    remotePatterns,
  },
  webpack: (webpackConfig) => {
    webpackConfig.resolve.extensionAlias = {
      '.cjs': ['.cts', '.cjs'],
      '.js': ['.ts', '.tsx', '.js', '.jsx'],
      '.mjs': ['.mts', '.mjs'],
    }

    return webpackConfig
  },
  reactStrictMode: true,
  typescript: {
    ignoreBuildErrors: true,
  },
  redirects: redirects as NextConfig['redirects'],
  output: 'standalone',
  sassOptions: {
    includePaths: [
      path.join(cwd, 'node_modules'),
      path.join(cwd, 'node_modules', '@payloadcms', 'ui', 'dist', 'scss'),
    ],
  },
  allowedDevOrigins: ['marketing.karmagroup.com', 'dev.marketing.karmagroup.com'],
  env: {
    NEXT_PUBLIC_APP_VERSION: process.env.npm_package_version || '0.0.0',
  },
}

export default withPayload(nextConfig, { devBundleServerPackages: false })
