# frozen_string_literal: true

class ProblemCheck::Problem
  PRIORITIES = %w[low high].freeze

  attr_reader :message, :priority, :identifier, :target, :details

  def initialize(message, priority: "low", identifier: nil, target: nil, details: {})
    @message = message
    @priority = PRIORITIES.include?(priority) ? priority : "low"
    @identifier = identifier
    @target = target
    @details = details
  end

  def to_s
    @message
  end

  def to_h
    { message: message, priority: priority, identifier: identifier }
  end
  alias_method :attributes, :to_h

  def self.from_h(h)
    h = h.with_indifferent_access

    return if h[:message].blank?

    new(h[:message], priority: h[:priority], identifier: h[:identifier])
  end
end