module Recommendations
  class User
    module Suggestions
      def suggestions
        Recommendations.redis.hgetall("recommendations:suggestions:user:#{id}")
                             .select {|key, value| Float(value) > 0}
      end

      def update_suggestions
        ratings = self.ratings

        suggestions = ratings.inject({}) do |buffer, (item_id, score)|
          similars = Item.find(item_id).similars
          similars.reject! {|i| ratings.key?(i)}

          similars.each do |similar|
            buffer[similar] ||= 0
            buffer[similar] += (Float(score) - 3) # 0..5 score => -2..2
          end

          buffer
        end

        #
        #self.similars.each do |similar| #similars users
          #remover os ratings q o usuário já fez
        #  similar_ratings = User.new(similar).ratings
        #  similar_ratings.reject! {|i| ratings.key?(i.key)}

#          similar_ratings.each do |(item_id, score)| #user ratings
 #           suggestions[item_id] ||= 0
  #          suggestions[item_id] += (Float(score) - 3) # 0..5 score => -2..2
   #       end
   #     end
        #
        Recommendations.redis.hmset("recommendations:suggestions:user:#{id}", *suggestions.flatten)
      end
    end
  end
end