# frozen_string_literal: true

# Will check the application version to ensure it is up-to-date
class VersionCheckWorker
  include Sidekiq::Worker
  sidekiq_options lock: :until_executed,
                  on_conflict: :reject,
                  queue: :system

  def perform
    require 'fab_hub'
    begin
      res = FabHub.fab_manager_version_check
    rescue Errno::ECONNREFUSED => e
      if Rails.env.development?
        logger.warn "Unable to check the version, maybe FabHub is not running: #{e}"
        return
      end
    end


    setting_ver = Setting.find_or_initialize_by(name: 'hub_last_version')
    value = {
      security: res['status']['security'],
      up_to_date: res['status']['up_to_date']
    }
    if res['upgrade_to']
      value['version'] = res['upgrade_to']['semver']
      value['url'] = res['upgrade_to']['url']
    end
    setting_ver.value = value.to_json.to_s
    setting_ver.save!

    setting_key = Setting.find_or_initialize_by(name: 'hub_public_key')
    if setting_key.value != res['key']
      setting_key.value = res['key']
      setting_key.save!
    end

    setting_uuid = Setting.find_or_initialize_by(name: 'uuid')
    return if setting_uuid.value == res['uuid']

    setting_uuid.value = res['uuid']
    setting_uuid.save!
  end
end