"use strict";
const index = require("./user-v6mfWQ2d.cjs");
const team = require("./team-jMpZEXjq.cjs");
const log = index.logger.getSubLogger({ prefix: ["lib", "createAProfileForAnExistingUser"] });
const createAProfileForAnExistingUser = async ({
  user,
  organizationId
}) => {
  const teamRepo = new team.TeamRepository(index.prisma);
  const org = await teamRepo.findById({ id: organizationId });
  if (!org) {
    throw new Error(`Organization with id ${organizationId} not found`);
  }
  const existingProfile = await index.ProfileRepository.findByUserIdAndOrgId({
    userId: user.id,
    organizationId
  });
  if (existingProfile) {
    return existingProfile;
  }
  const usernameInOrg = index.getOrgUsernameFromEmail(
    user.email,
    org.organizationSettings?.orgAutoAcceptEmail ?? null
  );
  const profile = await index.ProfileRepository.createForExistingUser({
    userId: user.id,
    organizationId,
    username: usernameInOrg,
    email: user.email,
    movedFromUserId: user.id
  });
  const userRepo = new index.UserRepository(index.prisma);
  await userRepo.updateWhereId({
    whereId: user.id,
    data: {
      movedToProfileId: profile.id
    }
  });
  log.debug(
    "Created profile for user",
    index.safeStringify({ userId: user.id, profileId: profile.id, usernameInOrg, username: user.currentUsername })
  );
  const orgSlug = org.slug || org.requestedSlug;
  if (!orgSlug) {
    throw new Error(`Organization with id ${organizationId} doesn't have a slug`);
  }
  const orgUrl = index.getOrgFullOrigin(orgSlug);
  if (org.isPlatform) {
    return profile;
  }
  if (user.currentUsername) {
    log.debug(`Creating redirect for user ${user.currentUsername} to ${orgUrl}/${usernameInOrg}`);
    await index.prisma.tempOrgRedirect.upsert({
      where: {
        from_type_fromOrgId: {
          from: user.currentUsername,
          type: index.RedirectType.User,
          fromOrgId: 0
        }
      },
      update: {
        type: index.RedirectType.User,
        from: user.currentUsername,
        fromOrgId: 0,
        toUrl: `${orgUrl}/${usernameInOrg}`
      },
      create: {
        type: index.RedirectType.User,
        from: user.currentUsername,
        fromOrgId: 0,
        toUrl: `${orgUrl}/${usernameInOrg}`
      }
    });
  } else {
    log.debug(`Skipping redirect setup as ${user.id} doesn't have a username`);
  }
  return profile;
};
exports.createAProfileForAnExistingUser = createAProfileForAnExistingUser;
