import type { SQLiteTransaction } from 'drizzle-orm/sqlite-core'
import type { SQLWrapper } from 'drizzle-orm'

export type Schema = Record<string, unknown>

export type SQLiteQuerier<S extends Schema = Record<string, never>> = {
  readonly _schema?: S
  select: (...args: unknown[]) => unknown
  insert: (table: unknown) => unknown
  update: (table: unknown) => unknown
  delete: (table: unknown) => unknown
  execute: (query: SQLWrapper) => Promise<unknown>
}

export type SQLiteTransactionalDatabase<S extends Schema = Record<string, never>> = SQLiteQuerier<S> & {
  transaction<T>(fn: (tx: SQLiteTransaction<'async', unknown, S, Record<string, never>>) => Promise<T>): Promise<T>
}
