import { PrismaService } from '../prisma/prisma.service';

/**
 * ¿El actor tiene acceso elevado? (superadmin, holding o reseller)
 *
 * Mismo criterio que `UsersService.resolveActorScope` y que los guards de
 * permisos. Un actor elevado no depende de `asignacion_sucursal_caja_usuario`:
 * ve todas las sucursales y cajas de la empresa sin que haya que asignárselas
 * una por una.
 *
 * Ante cualquier duda devuelve `false` (no elevado), que es el lado seguro.
 */
export async function tieneAccesoElevado(
  prisma: PrismaService,
  usuario_id?: string,
  empresa_id?: string,
): Promise<boolean> {
  if (!usuario_id) return false;

  const [actor, empresa] = await Promise.all([
    prisma.usuario.findUnique({
      where: { id: usuario_id },
      select: { is_superadmin: true },
    }),
    empresa_id
      ? prisma.empresas.findUnique({ where: { id: empresa_id }, select: { type: true } })
      : Promise.resolve(null),
  ]);

  return (
    (actor?.is_superadmin ?? false) ||
    empresa?.type === 'holding' ||
    empresa?.type === 'reseller'
  );
}
