import { entities } from '@backend/domain'
import { TypeOrmModuleOptions, TypeOrmOptionsFactory } from '@nestjs/typeorm'
import { config } from 'dotenv'
import { values } from 'es-toolkit/compat'
import { PostgresConnectionOptions } from 'typeorm/driver/postgres/PostgresConnectionOptions'
import * as Migrations from '../../migrations'

config({ path: 'apps/backend/.env', quiet: true })

const dbTimeout = process.env.DB_TIMEOUT ? Number.parseInt(process.env.DB_TIMEOUT) : 30_000

export const options: PostgresConnectionOptions = {
	type: 'postgres',
	host: process.env.DATABASE_HOST || 'localhost',
	port: Number.parseInt(process.env.DATABASE_PORT || '5432'),
	username: process.env.DATABASE_USERNAME || 'root',
	password: process.env.DATABASE_PASSWORD || 'root',
	database: process.env.DATABASE_NAME,
	connectTimeoutMS: dbTimeout,
	logging: false,
	synchronize: false,
	dropSchema: false,
	migrationsRun: true,
	entities,
	migrations: values(Migrations),
}

export class TypeOrmOptions implements TypeOrmOptionsFactory {
	createTypeOrmOptions(): TypeOrmModuleOptions {
		return options
	}
}
