class NoOpHTTPClient
  def self.post(uri, params = {})
    # bonus, you could log or observe posted params here
  end
end

def create_normal_notifier
  Slack::Notifier.new(
    ApplicationConfig["SLACK_WEBHOOK_URL"],
    channel: ApplicationConfig["SLACK_CHANNEL"],
    username: "activity_bot",
  )
end

def create_test_channel_notifier
  return create_stubbed_notifier if ApplicationConfig["SLACK_WEBHOOK_URL"].blank?

  Slack::Notifier.new(
    ApplicationConfig["SLACK_WEBHOOK_URL"],
    channel: "#test",
    username: "development_test_bot",
  )
end

def create_stubbed_notifier
  Slack::Notifier.new "WEBHOOK_URL" do
    http_client NoOpHTTPClient
  end
end

def init_slack_client
  default_options = if Rails.env.production?
                      {
                        channel: ApplicationConfig["SLACK_CHANNEL"],
                        username: "activity_bot"
                      }
                    elsif Rails.env.test?
                      {
                        channel: "#test",
                        username: "development_test_bot"
                      }
                    end

  webhook_url = ApplicationConfig["SLACK_WEBHOOK_URL"]
  use_no_op_client = Rails.env.test? || webhook_url.blank?

  Slack::Notifier.new(webhook_url) do
    defaults(default_options)
    http_client(NoOpHTTPClient) if use_no_op_client
  end
end

SlackClient = init_slack_client
