import { l as logger, a as safeStringify, n as getOrgFullOrigin, p as prisma, o as RedirectType } from "./orgDomains-eTg-cjth.js";
import { P as ProfileRepository, a as getOrgUsernameFromEmail, U as UserRepository } from "./user-9vti0VBh.js";
import { T as TeamRepository } from "./team-cSXKHM6s.js";
const log = logger.getSubLogger({ prefix: ["lib", "createAProfileForAnExistingUser"] });
const createAProfileForAnExistingUser = async ({
  user,
  organizationId
}) => {
  const teamRepo = new TeamRepository(prisma);
  const org = await teamRepo.findById({ id: organizationId });
  if (!org) {
    throw new Error(`Organization with id ${organizationId} not found`);
  }
  const existingProfile = await ProfileRepository.findByUserIdAndOrgId({
    userId: user.id,
    organizationId
  });
  if (existingProfile) {
    return existingProfile;
  }
  const usernameInOrg = getOrgUsernameFromEmail(
    user.email,
    org.organizationSettings?.orgAutoAcceptEmail ?? null
  );
  const profile = await ProfileRepository.createForExistingUser({
    userId: user.id,
    organizationId,
    username: usernameInOrg,
    email: user.email,
    movedFromUserId: user.id
  });
  const userRepo = new UserRepository(prisma);
  await userRepo.updateWhereId({
    whereId: user.id,
    data: {
      movedToProfileId: profile.id
    }
  });
  log.debug(
    "Created profile for user",
    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 = getOrgFullOrigin(orgSlug);
  if (org.isPlatform) {
    return profile;
  }
  if (user.currentUsername) {
    log.debug(`Creating redirect for user ${user.currentUsername} to ${orgUrl}/${usernameInOrg}`);
    await prisma.tempOrgRedirect.upsert({
      where: {
        from_type_fromOrgId: {
          from: user.currentUsername,
          type: RedirectType.User,
          fromOrgId: 0
        }
      },
      update: {
        type: RedirectType.User,
        from: user.currentUsername,
        fromOrgId: 0,
        toUrl: `${orgUrl}/${usernameInOrg}`
      },
      create: {
        type: 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;
};
export {
  createAProfileForAnExistingUser as c
};
