import { drizzle } from "drizzle-orm/postgres-js";
import postgres from "postgres";
import * as schema from "./schema";

type DrizzleDb = ReturnType<typeof createDb>;

function createDb() {
  const url = process.env.DATABASE_URL;
  if (!url) {
    throw new Error("DATABASE_URL environment variable is not set");
  }
  const client = postgres(url);
  return drizzle({ client, schema });
}

// Lazy singleton — created on first use, not at module load time
let _db: DrizzleDb | undefined;

export const db = new Proxy({} as DrizzleDb, {
  get(_target, prop: string | symbol) {
    if (!_db) _db = createDb();
    return (_db as unknown as Record<string | symbol, unknown>)[prop];
  },
});
