import { PrismaClient, Role } from '@prisma/client';
import { hashPassword } from '@models/users/functions/password.functions';
import { loadTestEnv } from './test-env';

/**
 * Seed de la base de TEST : insère directement via Prisma (bypass de
 * l'AuthGuard global) un admin et un super admin utilisables par les tests.
 * Réf : docs/e2e-testing-spec.md §4.2
 */

export const TEST_ADMIN = {
  email: 'admin@studio-m.test',
  password: 'admin-password',
  firstname: 'Admin',
  lastname: 'Test',
  role: Role.ADMIN,
};

export const TEST_SUPER_ADMIN = {
  email: 'super-admin@studio-m.test',
  password: 'super-admin-password',
  firstname: 'SuperAdmin',
  lastname: 'Test',
  role: Role.SUPER_ADMIN,
};

export async function seed(prisma: PrismaClient): Promise<void> {
  for (const user of [TEST_ADMIN, TEST_SUPER_ADMIN]) {
    await prisma.user.create({
      data: {
        email: user.email,
        firstname: user.firstname,
        lastname: user.lastname,
        role: user.role,
        password: await hashPassword(user.password),
      },
    });
  }
}

if (require.main === module) {
  loadTestEnv();
  const prisma = new PrismaClient();
  seed(prisma)
    .then(() => {
      console.log('Seed OK : admin + super_admin créés.');
    })
    .catch((error) => {
      console.error(error);
      process.exitCode = 1;
    })
    .finally(() => prisma.$disconnect());
}
