module Legacy
  class UserUpdateJob < UpdateJob
    queue_as :default

    def perform(user, saved_changes = {})
      email_was = saved_changes[:email][0] if saved_changes[:email]
      @user = user
      legacy_title = Legacy::Title.find_by(name: Legacy::Title.name_with_prefix(user.title.name)) if user.title
      @legacy_user = Legacy::User.find_or_initialize_by(email: email_was.present? ? email_was : user.email, title_id: legacy_title&.id)
      if @legacy_user.persisted? || @user.active?
        @legacy_user.assign_attributes(user_attributes)
        @legacy_user.save!
      end
    rescue ::Exception => e
      attr = user_attributes rescue @user.attributes.slice(*user_columns) rescue nil
      ::ActiveJobMailer.error(self.class.to_s, e, attr).deliver_now
    end
  end
end
