import { AdminUserRole } from "@prisma/client";
import * as bcrypt from "bcrypt";
import * as jwt from "jsonwebtoken";
import { newId } from "../../src/common/ids/id.util";
import { PrismaService } from "../../src/prisma/prisma.service";

export interface SeededAdmin {
  id: string;
  email: string;
  accessToken: string;
}

export async function seedAdminUser(
  prisma: PrismaService,
): Promise<SeededAdmin> {
  const email = `admin-${Date.now()}@test.local`;
  const passwordHash = await bcrypt.hash("password", 4);
  const user = await prisma.adminUser.create({
    data: {
      id: newId("adminUser"),
      email,
      name: "Test Admin",
      passwordHash,
      role: AdminUserRole.superadmin,
      active: true,
    },
  });

  const secret = process.env.ADMIN_JWT_SECRET as string;
  const accessToken = jwt.sign(
    { sub: user.id, email: user.email, role: user.role, kind: "admin_user_access" },
    secret,
    { expiresIn: 900, issuer: "novasis-pay", audience: "novasis-pay-admin" },
  );

  return { id: user.id, email, accessToken };
}
