class ExternalPost
  # These mimic the equivalent attributes in Post directly.
  attr_accessor :md5, :url, :preview_url, :sample_url, :service, :width, :height, :tags, :rating, :id, :similarity

  class << self
    def get_service_icon(service)
      filename =
        case service
        # FIXME: figure out why it's empty string
        when "", CONFIG["local_image_service"]
          nil
        when "gelbooru.com" # hack
          "#{service}.png"
        else
          "#{service}.ico"
        end

      if filename.present?
        ApplicationController.helpers.image_url "favicons/#{filename}"
      else
        "/favicon.ico"
      end
    end
  end

  def service_icon
    ExternalPost.get_service_icon(service)
  end

  def ext
    true
  end

  def cached_tags
    tags
  end

  def to_xml(options = {})
    { md5: md5, url: url, preview_url: preview_url, service: service }.to_xml(options.merge(root: "external-post"))
  end

  def preview_dimensions
    dim = Moebooru::Resizer.reduce_to({ width: width, height: height }, width: 150, height: 150)
    [ dim[:width], dim[:height] ]
  end

  def use_jpeg?(_user)
    false
  end

  def has_jpeg?
    false
  end

  def is_flagged?
    false
  end

  def has_children?
    false
  end

  def is_pending?
    false
  end

  def parent_id
    nil
  end

  # For external posts, we only link to the page containing the image, not directly
  # to the image itself, so url and file_url are the same.
  def file_url
    url
  end
end
