import { AccountsMagicLink, RequestMagicLinkEmailErrors } from '@accounts/magic-link';
import { AccountsServer, AccountsJsError } from '@accounts/server';
import { type MutationResolvers } from '../models';

export const Mutation: MutationResolvers = {
  requestMagicLinkEmail: async (_, { email }, ctx) => {
    const { injector } = ctx;
    const accountsServer = injector.get(AccountsServer);
    const accountsMagicLink = injector.get(AccountsMagicLink);

    try {
      await accountsMagicLink.requestMagicLinkEmail(email);
    } catch (error) {
      // If ambiguousErrorMessages is true,
      // to prevent user enumeration we fail silently in case there is no user attached to this email
      if (
        accountsServer.options.ambiguousErrorMessages &&
        error instanceof AccountsJsError &&
        error.code === RequestMagicLinkEmailErrors.UserNotFound
      ) {
        return null;
      }
      throw error;
    }

    return null;
  },
};
