/* eslint-disable @typescript-eslint/no-explicit-any */
const process: any = globalThis.process;


export type DbEnv = {
  host: string;
  port: number;
  user: string;
  password: string;
  database: string;
};

function required(name: string): string {
  const v = process.env[name];
  if (!v) {
    throw new Error(`Missing required env var: ${name}`);
  }
  return v;
}

export function readDbEnv(): DbEnv {
  return {
    host: required("DB_HOST"),
    port: Number(required("DB_PORT")),
    user: required("DB_USER"),
    password: required("DB_PASSWORD"),
    database: required("DB_NAME"),
  };
}

export function ensureDatabaseUrl(): string {
  const existing = process.env.DATABASE_URL;
  if (existing) return existing;

  const env = readDbEnv();

  // Postgres URI format
  // postgresql://user:password@host:port/database
  const url = `postgresql://${encodeURIComponent(env.user)}:${encodeURIComponent(env.password)}@${env.host}:${env.port}/${env.database}`;

  // Make sure downstream code sees it.
  process.env.DATABASE_URL = url;
  return url;
}

