# frozen_string_literal: true

module Gitlab
  module Ci
    module Reports
      module Security
        class FindingSignature
          include VulnerabilityFindingSignatureHelpers

          attr_accessor :algorithm_type, :signature_value

          def initialize(params = {})
            @algorithm_type = params.dig(:algorithm_type)
            @signature_value = params.dig(:signature_value)
          end

          def priority
            ::Vulnerabilities::FindingSignature.priority(algorithm_type)
          end

          def signature_sha
            Digest::SHA1.digest(signature_value)
          end

          def signature_hex
            signature_sha.unpack1("H*")
          end

          def to_hash
            {
              algorithm_type: algorithm_type,
              signature_sha: signature_sha
            }
          end

          def valid?
            ::Vulnerabilities::FindingSignature.algorithm_types.key?(algorithm_type)
          end

          def eql?(other)
            other.algorithm_type == algorithm_type &&
              other.signature_sha == signature_sha
          end

          alias_method :==, :eql?
        end
      end
    end
  end
end
