require 'faker'
require './vuln_generator'

module KennaKdi
  class AssetGenerator < VulnGenerator

    def skip_autoclose(value = true)
      { "skip_autoclose": value }
    end

    def assets_merge(assets_array)
      { "assets": assets_array }
    end

    def vuln_def_merge(vuln_hashes)
      vuln_def_array = vuln_hashes.map do |vuln_hash|
        vuln_def_hash(vuln_hash)
      end

      {
        "vuln_defs": vuln_def_array
      }
    end

    def create_assets(number_of_assets, number_of_vulns)
      assets = assets_array(number_of_assets, number_of_vulns)
      vuln_hashes = assets.map {|asset| asset[:vulns]}.flatten

      header_and_assets = skip_autoclose.merge(assets_merge(assets))
      header_and_assets.merge(vuln_def_merge(vuln_hashes))
    end

    def assets_array(number_of_assets, number_of_vulns)
      # this should be the primary logic that will generate the "assets": [asset1, asset2] data for the json
      number_of_assets.times.map do
        multiple_vulns_asset_hash(number_of_vulns)
      end
    end

    def multiple_vulns_asset_hash(number_of_vulns)
      # generate number of vulns specified vuln and vulndef pairs to work with
      v_and_vds = multiple_vulns(number_of_vulns)
      {
        "ip_address": Faker::Internet.ip_v4_address,
        "vulns": vulns(v_and_vds)
      }
    end
  end
end