# encoding: utf-8

require 'happymapper'
require 'nokogiri'

# rubocop: disable Naming/ClassAndModuleCamelCase

module HappyMapperTools
  module CCIAttributes
    class Reference
      include HappyMapper
      tag 'reference'

      attribute :creator, String, tag: 'creator'
      attribute :title, String, tag: 'title'
      attribute :version, String, tag: 'version'
      attribute :location, String, tag: 'location'
      attribute :index, String, tag: 'index'
    end

    class References
      include HappyMapper
      tag 'references'

      has_many :references, Reference, tag: 'reference'
    end

    class CCI_Item
      include HappyMapper
      tag 'cci_item'

      attribute :id, String, tag: 'id'
      element :status, String, tag: 'status'
      element :publishdate, String, tag: 'publishdate'
      element :contributor, String, tag: 'contributor'
      element :definition, String, tag: 'definition'
      element :type, String, tag: 'type'
      has_one :references, References, tag: 'references'
    end

    class CCI_Items
      include HappyMapper
      tag 'cci_items'

      has_many :cci_item, CCI_Item, tag: 'cci_item'
    end

    class Metadata
      include HappyMapper
      tag 'metadata'

      element :version, String, tag: 'version'
      element :publishdate, String, tag: 'publishdate'
    end

    class CCI_List
      include HappyMapper
      tag 'cci_list'

      attribute :xsi, String, tag: 'xsi', namespace: 'xmlns'
      attribute :schemaLocation, String, tag: 'schemaLocation', namespace: 'xmlns'
      has_one :metadata, Metadata, tag: 'metadata'
      has_many :cci_items, CCI_Items, tag: 'cci_items'

      def fetch_nists(ccis)
        ccis = [ccis] unless ccis.is_a?(Array)
        nists = []
        nist_ver = cci_items[0].cci_item[0].references.references.max_by(&:version).version
        ccis.each do |cci|
          nists << cci_items[0].cci_item.select { |item| item.id == cci }.first.references.references.max_by(&:version).index
        end
        nists << ('Rev_' + nist_ver)
      end
    end
  end
end