import { PrismaClient } from '@prisma/client'

export default function newPrismaClient ({ options = {}, connectionParams = {} }) {
  const url = new URL(process.env.DATABASE_URL)
  for (const [key, value] of Object.entries(connectionParams)) {
    if (value === undefined) continue
    url.searchParams.set(key, value)
  }

  const prisma = new PrismaClient({
    datasourceUrl: url.toString(),
    ...options,
    transactionOptions: {
      timeout: process.env.DB_TRANSACTION_TIMEOUT ? parseInt(process.env.DB_TRANSACTION_TIMEOUT) : undefined,
      ...options.transactionOptions
    }
  })

  prisma.$on('query', (e) => {
    if (process.env.PRISMA_SLOW_LOGS_MS && e.duration > process.env.PRISMA_SLOW_LOGS_MS) {
      console.log('Query: ' + e.query)
      console.log('Params: ' + e.params)
      console.log('Duration: ' + e.duration + 'ms')
    }
  })

  return prisma
}