import { drizzle } from 'drizzle-orm/postgres-js';
import postgres from 'postgres';

import * as schema from './schema';

const connectionString = process.env.DATABASE_URL!;

// Connection pool for queries.
const queryClient = postgres(connectionString, {
  max: 20,
  idle_timeout: 20,
  connect_timeout: 10,
});

export const db = drizzle(queryClient, {
  schema,
  logger: process.env.NODE_ENV === 'development',
});

/** Close the underlying connection pool. Used by the vitest teardown so
 *  the parent process can exit cleanly. */
export async function closeDb(): Promise<void> {
  await queryClient.end({ timeout: 5 });
}

export type Database = typeof db;
