# frozen_string_literal: true

module Gitlab
  module Ci
    module Reports
      module Sbom
        class Component
          attr_reader :component_type, :name, :version

          def initialize(type:, name:, purl:, version:)
            @component_type = type
            @name = name
            @purl = purl
            @version = version
          end

          def ingestible?
            supported_component_type? && supported_purl_type?
          end

          def purl
            return unless @purl

            ::Sbom::PackageUrl.parse(@purl)
          end

          private

          def supported_component_type?
            ::Enums::Sbom.component_types.include?(component_type.to_sym)
          end

          def supported_purl_type?
            return true unless purl

            ::Enums::Sbom.purl_types.include?(purl.type.to_sym)
          end
        end
      end
    end
  end
end