import { TEAM_MEMBER_ROLE_PERMISSIONS_MAP } from '@documenso/lib/constants/teams';
import { prisma } from '@documenso/prisma';

import { buildTeamWhereQuery } from '../../utils/teams';
import { assertCanUpdateTeam, rethrowTeamUpdateError } from './team-update-permissions';

export type UpdatePublicProfileOptions = {
  userId: number;
  teamId: number;
  data: {
    bio?: string;
    enabled?: boolean;
  };
};

export const updateTeamPublicProfile = async ({ userId, teamId, data }: UpdatePublicProfileOptions) => {
  await assertCanUpdateTeam({ userId, teamId });

  return await prisma.team
    .update({
      where: buildTeamWhereQuery({
        teamId,
        userId,
        roles: TEAM_MEMBER_ROLE_PERMISSIONS_MAP['MANAGE_TEAM'],
      }),
      data: {
        profile: {
          upsert: {
            create: data,
            update: data,
          },
        },
      },
      include: {
        profile: true,
      },
    })
    .catch(rethrowTeamUpdateError);
};
