# frozen_string_literal: true

# retrieve the Fab-manager's versions
class Version
  # currently installed
  def self.current
    package = File.read('package.json')
    JSON.parse(package)['version']
  end

  # currently published
  def self.up_to_date?
    hub_version = Setting.find_by(name: 'hub_last_version')&.value
    return unless hub_version

    json = JSON.parse(hub_version)
    json['up_to_date']
  end

  # periodically retrieve the last published version from the hub and save it into the database
  def self.check_and_schedule
    job_name = 'Automatic version check'
    return if (Rails.env.development? || Rails.env.test?) && ENV['FORCE_VERSION_CHECK'] != 'true'

    job = Sidekiq::Cron::Job.find name: job_name
    unless job
      # schedule a version check, every week at the current day+time
      # this will prevent that all the instances query the hub simultaneously
      m = DateTime.current.minute
      h = DateTime.current.hour
      d = DateTime.current.cwday
      job = Sidekiq::Cron::Job.new(name: job_name, cron: "#{m} #{h} * * #{d}", class: 'VersionCheckWorker')
      job.save
    end
    job.enque! if !job.last_enqueue_time || job.last_enqueue_time < DateTime.current - 24.hours
  end
end