# frozen_string_literal: true

require 'json'
require '/data_importer/lib/json_helper'
require 'rest-client'

class CnaImporter
  EXPECTED_KEYS = %i[
    short_name
    cna_id
    organization_name
    scope
    contact
    disclosure_policy
    security_advisories
    resources
    cna
    country
  ].freeze

  EMPTY_HASH = EXPECTED_KEYS.map { |k| [k, nil] }.to_h.freeze

  attr_accessor :url

  def initialize
    @url = 'https://raw.githubusercontent.com/CVEProject/cve-website/dev/src/assets/data/CNAsList.json'
  end

  def send_request_rest
    RestClient::Request.execute(
      method: :get,
      url: url
    )
  end

  def parse_res(response)
    JSON.parse(response.body, symbolize_names: true)
  end

  def get_json
    res = send_request_rest
    if res.code == 200
      json = parse_res(res)
      JsonHelper.deep_transform_keys(json)
    else
      "HTTP Status: #{res.code}"
    end
  end

  def import
    jsons = get_json
    merged_hashes = jsons.map { |h| h.slice(*EXPECTED_KEYS).reverse_merge(EMPTY_HASH) }
    puts 'Now importing CNAs.'
    Cna.upsert_all(merged_hashes, unique_by: :cna_id)
  end
end