import type { NextConfig } from 'next';
import fs from 'fs';
import path from 'path';

const monorepoRoot = path.join(__dirname, '../..');

/** Read a single var from a .env file (fallback when monorepo root .env isn't auto-loaded). */
function readEnvFileVar(filePath: string, key: string): string {
  if (!fs.existsSync(filePath)) return '';
  for (const line of fs.readFileSync(filePath, 'utf8').split('\n')) {
    const trimmed = line.trim();
    if (!trimmed || trimmed.startsWith('#')) continue;
    const eq = trimmed.indexOf('=');
    if (eq === -1) continue;
    const name = trimmed.slice(0, eq).trim();
    if (name !== key) continue;
    let value = trimmed.slice(eq + 1).trim();
    if (
      (value.startsWith('"') && value.endsWith('"')) ||
      (value.startsWith("'") && value.endsWith("'"))
    ) {
      value = value.slice(1, -1);
    }
    return value;
  }
  return '';
}

const googleMapsApiKey =
  process.env.NEXT_PUBLIC_GOOGLE_MAPS_API_KEY ||
  readEnvFileVar(path.join(monorepoRoot, '.env'), 'NEXT_PUBLIC_GOOGLE_MAPS_API_KEY');

const googleClientId =
  process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID ||
  readEnvFileVar(path.join(monorepoRoot, '.env'), 'NEXT_PUBLIC_GOOGLE_CLIENT_ID');

const nextConfig: NextConfig = {
  env: {
    NEXT_PUBLIC_GOOGLE_MAPS_API_KEY: googleMapsApiKey,
    NEXT_PUBLIC_GOOGLE_CLIENT_ID: googleClientId,
  },
  ...(process.env.NODE_ENV === 'production'
    ? { output: 'standalone' as const, outputFileTracingRoot: monorepoRoot }
    : {}),
  images: {
    remotePatterns: [
      { protocol: 'http', hostname: 'localhost', port: '4000' },
    ],
  },
  async rewrites() {
    return [
      {
        source: '/api/:path*',
        destination: `${process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'}/api/:path*`,
      },
    ];
  },
};

export default nextConfig;
