# frozen_string_literal: true

class FeedItemAccessor
  attr_accessor :rss_item

  def initialize(rss_item)
    @rss_item = rss_item
  end

  def element_content(element_name)
    try_attribute_or_self(element(element_name), :content)
  end

  def link
    if rss_item.respond_to?(:links)
      link = rss_item.links&.find { |l| l.rel == "alternate" && l.type == "text/html" }
      return link.href if link.respond_to?(:href)
    end

    try_attribute_or_self(element(:link), :href)
  end

  private

  def element(element_name)
    rss_item.respond_to?(element_name) ? rss_item.public_send(element_name) : nil
  end

  def try_attribute_or_self(element, attribute_name)
    element.respond_to?(attribute_name) ? element.public_send(attribute_name) : element
  end
end