import fs from 'fs';
import path from 'path';
import dotenv from 'dotenv';

// Single env file: repo-root `.env` only (do not use server/.env)
const rootEnv = path.resolve(__dirname, '../../.env');
if (fs.existsSync(rootEnv)) dotenv.config({ path: rootEnv });
else dotenv.config();

function required(name: string, fallback?: string): string {
  const v = process.env[name] ?? fallback;
  if (v == null || v === '') {
    throw new Error(`Missing required env var: ${name}`);
  }
  return v;
}

export const config = {
  nodeEnv: process.env.NODE_ENV || 'development',
  port: Number(process.env.PORT || 4000),
  databaseUrl: required('DATABASE_URL'),
  jwtSecret: required('JWT_SECRET', 'dev-only-secret'),
  jwtExpiresIn: process.env.JWT_EXPIRES_IN || '7d',
  uploadDir: path.resolve(
    process.cwd(),
    process.env.UPLOAD_DIR || './uploads'
  ),
  corsOrigin: process.env.CORS_ORIGIN || 'http://localhost:4000',
  isDev: (process.env.NODE_ENV || 'development') !== 'production',
};
