import 'dotenv/config';
import { execFileSync } from 'node:child_process';
import { criarBancoSeFaltar, nomeDoBanco, urlDoBancoDeTeste } from './banco-de-teste';

/**
 * Preparação única da suíte e2e: garante que o **banco de teste** existe e está
 * migrado.
 *
 * Roda uma vez por execução, antes de qualquer suíte. As suítes em si recebem a
 * URL por `setupFiles` (`usar-banco-de-teste.ts`), porque cada worker do Jest
 * tem o seu próprio `process.env`.
 */
export default async function globalSetup(): Promise<void> {
  const url = urlDoBancoDeTeste();
  await criarBancoSeFaltar(url);

  // `migrate deploy` em vez de `dev`: não cria migration nova nem faz pergunta,
  // que é o que se quer dentro de um teste.
  execFileSync('npx', ['prisma', 'migrate', 'deploy'], {
    env: { ...process.env, DATABASE_URL: url },
    stdio: 'pipe',
  });

  // eslint-disable-next-line no-console
  console.log(`\n[e2e] banco de teste: ${nomeDoBanco(url)} (separado do de dev)`);
}
