import { drizzle } from 'drizzle-orm/postgres-js'
import postgres from 'postgres'
import * as schema from '../database/schema'

/**
 * Database connection utility
 *
 * Creates a singleton Drizzle ORM instance with the complete schema.
 * This allows for type-safe database queries throughout the application.
 *
 * Usage:
 * ```typescript
 * import { db } from '~/server/utils/db'
 *
 * // Query with relations
 * const users = await db.query.users.findMany({
 *   with: { orders: true }
 * })
 *
 * // Raw SQL with type safety
 * import { users } from '~/server/database/schema'
 * import { eq } from 'drizzle-orm'
 *
 * const user = await db.select().from(users).where(eq(users.id, userId))
 * ```
 */

const config = useRuntimeConfig()

// Create postgres.js client
const client = postgres(config.databaseUrl)

// Create Drizzle ORM instance with schema
export const db = drizzle(client, { schema })

/**
 * Helper function to get database instance
 * Used in event handlers for consistency with Nuxt patterns
 *
 * @returns Drizzle database instance
 */
export function useDatabase() {
  return db
}
