module Legacy
  class TitleProviderGroupUpdateJob < UpdateJob
    queue_as :default

    def perform(title_provider_group)
      @title_provider_group = title_provider_group
      @legacy_title_provider_group = Legacy::TitleProviderGroup.find_or_initialize_by(
        title_provider_group_name_id: Legacy::TitleProviderGroupName.find_or_create_by(name: Legacy::TitleProviderGroupName.name_with_prefix(@title_provider_group.title_provider_group_name.name)).id,
        provider_id: Legacy::Provider.create_with(name: @title_provider_group.provider.name).find_or_create_by(string_key: @title_provider_group.provider.string_key).id
      )
      @legacy_title_provider_group.assign_attributes(title_provider_groups_attributes)
      @legacy_title_provider_group.save!
    rescue ::Exception => e
      attr = title_provider_groups_attributes rescue @title_provider_group.attributes.slice(*title_provider_group_columns) rescue nil
      ::ActiveJobMailer.error(self.class.to_s, e, attr).deliver_now
    end

    def title_provider_groups_attributes
      attr = @title_provider_group.attributes.slice(*title_provider_group_columns)
      attr['id'] = @legacy_title_provider_group.id
      attr['title_provider_group_name_id'] = @legacy_title_provider_group.title_provider_group_name_id
      attr['provider_id'] = @legacy_title_provider_group.provider_id
      attr['authorizations_attributes'] = authorizations_attributes_for(@title_provider_group.authorizations, @legacy_title_provider_group.authorizations)
      attr
    end
  end
end
