class Bufferizer
  attr_accessor :post_type, :post, :text
  include ApplicationHelper

  def initialize(post_type, post, text, admin_id = nil)
    if post_type == "article"
      @article = post
    else
      @listing = post
    end
    @text = text
    @admin_id = admin_id
  end

  def satellite_tweet!
    @article.tags.find_each do |tag|
      next if tag.buffer_profile_id_code.blank?

      text = twitter_buffer_text
      text = text.gsub(" #DEVCommunity", " #DEVCommunity ##{tag.name}") if text.length < 250
      BufferUpdate.buff!(@article.id, text, tag.buffer_profile_id_code, "twitter", tag.id, @admin_id)
    end
    @article.update(last_buffered: Time.current)
  end

  def main_tweet!
    BufferUpdate.buff!(@article.id, twitter_buffer_text, ApplicationConfig["BUFFER_TWITTER_ID"], "twitter", nil, @admin_id)
    @article.update(last_buffered: Time.current)
  end

  def facebook_post!
    BufferUpdate.buff!(@article.id, fb_buffer_text, ApplicationConfig["BUFFER_FACEBOOK_ID"], "facebook", nil, @admin_id)
    BufferUpdate.buff!(@article.id, fb_buffer_text + social_tags, ApplicationConfig["BUFFER_LINKEDIN_ID"], "linkedin", nil, @admin_id)
    @article.update(facebook_last_buffered: Time.current)
  end

  def listings_tweet!
    buffer_listings_id = ApplicationConfig["BUFFER_LISTINGS_PROFILE"]
    BufferUpdate.send_to_buffer(listings_twitter_text, buffer_listings_id)
    @listing.update(last_buffered: Time.current)
  end

  private

  def twitter_buffer_text
    "#{text} #{article_url(@article)}" if text.size <= 255
  end

  def fb_buffer_text
    "#{text} #{article_url(@article)}"
  end

  def social_tags
    # for linkedin's followable tags
    " #programming #softwareengineering " + (@article.tag_list.map { |tag| "#" + tag }).join(" ")
  end

  def listings_twitter_text
    "#{text} #{app_url(@listing.path)}" if text.size <= 255
  end
end
