# frozen_string_literal: true

class BasePresenter
  attr_reader :current_user
  include Rails.application.routes.url_helpers

  class << self
    def new(*args)
      return NilPresenter.new if args[0].nil?
      super *args
    end

    def as_collection(collection, method=:as_json, *args)
      collection.map{|object| self.new(object, *args).send(method) }
    end
  end

  def initialize(presentable, curr_user=nil)
    @presentable = presentable
    @current_user = curr_user
  end

  def respond_to_missing?(method, include_private=false)
    @presentable.respond_to?(method) || super
  end

  def method_missing(method, *args, **kwargs) # rubocop:disable Lint/MissingSuper
    @presentable.public_send(method, *args, **kwargs)
  end

  class NilPresenter
    def method_missing(method, *args)
      nil
    end
  end

  private

  def default_url_options
    {host: AppConfig.pod_uri.host, port: AppConfig.pod_uri.port}
  end
end
