# frozen_string_literal: true

desc 'Create a fact list for the specified os'
task :fact_list_generator, [:os_name] do |_, args|
  ROOT_DIR = Pathname.new(File.expand_path('..', __dir__)) unless defined?(ROOT_DIR)

  unless args[:os_name]
    raise ArgumentError, "Expected an os name, such as `bundle exec rake 'fact_list_generator[Ubuntu]'`"
  end

  require 'facter/framework/core/file_loader'

  os_hierarchy = Facter::OsHierarchy.new
  hierarchy = os_hierarchy.construct_hierarchy(args[:os_name])

  internal_fact_loader = Facter::InternalFactLoader.new(hierarchy)
  facts = internal_fact_loader.facts

  fact_mapping = []
  facts.each do |loaded_fact|
    fact_hash = {}
    fact_hash[:name] = loaded_fact.name
    fact_hash[:klass] = loaded_fact.klass
    fact_hash[:type] = loaded_fact.type
    fact_mapping << fact_hash
  end

  puts JSON.pretty_generate(fact_mapping)
end
