module TipsanityMerchantExtractor
	class AttributeExtractor
    extend UrlFormatter
    [Amazon, LinkShare, Rakuten, BestBuy, Cj, TigerDirect].each do |merchant|
    	extend merchant
    end
    
    attr_accessor :merchant_url,
                  :host_provider,
                  :product_name,
                  :description,
                  :final_price,
                  :list_price,
                  :expiry_date,
                  :currency_code,
                  :image_url,
                  :details_url,
                  :is_dp,
                  :categories,
                  :response_object,
                  :product_token,
                  :options
                  :errors

    class << self
      def who_is_merchant(merchant_url)
        case URI(merchant_url).host
        when is_merchant_amazon?(merchant_url)
          RegisteredMerchantList::REGISTERED_MERCHANT[:amazon]
        when is_merchant_cj_bestbuy?(merchant_url)
          RegisteredMerchantList::REGISTERED_MERCHANT[:cjunction][:bestbuy]
        when is_merchant_linkshare_rakuten?(merchant_url)
          RegisteredMerchantList::REGISTERED_MERCHANT[:linkshare][0][:rakuten]
        when is_merchant_linkshare_tiger_direct?(merchant_url)
          RegisteredMerchantList::REGISTERED_MERCHANT[:linkshare][1][:tiger_direct]
        else
          "this merchant is not registered merchant with our system. Please recommend us to affliate with us."
          # URI(merchant_url).host
        end
      end
    end
    # end of self methods

    def initialize merchant_url, *args
      @options = args.extract_options!
      @url = merchant_url
      @merchant_url = self.class.format_url @url
      @host_provider = URI(@merchant_url).host
      @errors = []
      case self.class.who_is_merchant(@merchant_url)
      when RegisteredMerchantList::REGISTERED_MERCHANT[:amazon]
      	find_product_amazon @merchant_url

      when RegisteredMerchantList::REGISTERED_MERCHANT[:cjunction][:bestbuy]
      	find_product_cj @merchant_url

      when RegisteredMerchantList::REGISTERED_MERCHANT[:linkshare][0][:rakuten]
        find_product_rakuten @merchant_url, @options[:linkshare][:token], RegisteredMerchantList::REGISTERED_MERCHANT[:linkshare][0][:mid]

      when RegisteredMerchantList::REGISTERED_MERCHANT[:linkshare][1][:tiger_direct]
        find_product_tiger_direct @merchant_url, @options[:linkshare][:token], RegisteredMerchantList::REGISTERED_MERCHANT[:linkshare][1][:mid]

      else
        @product_name = nil
        @description = nil
        @list_price = nil
        @currency_code = nil
        @expiry_date = nil
        @image_url = nil
        @details_url = nil
        @final_price = nil
        @categories = nil
        @errors << "Unable to retrive from api"
      end
    end
  end
end