import { Prisma } from '@prisma/client';

import { TEAM_MEMBER_ROLE_PERMISSIONS_MAP } from '../../constants/teams';
import { AppError, AppErrorCode } from '../../errors/app-error';
import { getMemberRoles } from './get-member-roles';

export const assertCanUpdateTeam = async ({ userId, teamId }: { userId: number; teamId: number }) => {
  const { teamRole } = await getMemberRoles({
    teamId,
    reference: { type: 'User', id: userId },
  });

  if (!TEAM_MEMBER_ROLE_PERMISSIONS_MAP.MANAGE_TEAM.some((role) => role === teamRole)) {
    throw new AppError(AppErrorCode.FORBIDDEN, {
      message: 'You do not have permission to update this team.',
    });
  }
};

export const rethrowTeamUpdateError = (error: unknown): never => {
  if (error instanceof Prisma.PrismaClientKnownRequestError && error.code === 'P2025') {
    throw new AppError(AppErrorCode.NOT_FOUND, { message: 'Team not found' });
  }

  throw error;
};
