import postgres from 'postgres'
import { drizzle } from 'drizzle-orm/postgres-js'
import type { PostgresJsDatabase } from 'drizzle-orm/postgres-js'
import type { Schema, TransactionalDatabase } from '../index.js'
import { withTransactionIdentity } from '../transaction.js'

type PostgresJsTransactionalDatabase<S extends Schema> = Omit<PostgresJsDatabase<S>, 'transaction'> & {
  transaction: TransactionalDatabase<S>['transaction']
}

export function createPostgresJsClient<S extends Schema>(opts: {
  connectionString: string
  schema?: S
}): PostgresJsTransactionalDatabase<S> {
  const client = postgres(opts.connectionString)
  return withTransactionIdentity(drizzle(client, { schema: opts.schema })) as unknown as PostgresJsTransactionalDatabase<S>
}
