class UserDetail
  include Mongoid::Document
  field :facebook, type: Hash
  field :twitter, type: Hash
  field :email, type: Hash
  field :timestamp, type: Time
  field :rl_mac_id, type: String
  field :vd_mac_id, type: String
  belongs_to :visitor_detail
  index({"rl_mac_id" => 1, "timestamp" => 1}, {background: true})

  def self.get_mac_ids(rlids,start_date,end_date,offset)
    total_visits = self.collection.aggregate({"$match" => {"rl_mac_id" => {"$in" => rlids}, "$or" =>[{"facebook.mac_ids"=>{"$in"=>mac_ids}}, {"twitter.mac_ids"=>{"$in"=>mac_ids}}, {"email.mac_ids"=>{"$in"=>mac_ids}} ],"timestamp"=> { "$gte" => start_date, "$lte" =>end_date} } }, {"$project"=>{"timestamp"=>{"$add" => ["$timestamp", offset.to_i]}, "visitor_detail_id"=>1}},{ "$group"=> {"_id"=> { "year"=> {"$year"=>"$timestamp"},"month"=> {"$month"=>"$timestamp"},"day"=> {"$dayOfMonth"=>"$timestamp"}, "visitor_detail_id"=>"$visitor_detail_id"},  "count"=> { "$sum" => 1 }}}) rescue []

    never_visited = self.collection.aggregate({"$match" => {"rl_mac_id" => {"$in" => rlids}, "$or" =>[{"facebook.mac_ids"=>{"$in"=>mac_ids}}, {"twitter.mac_ids"=>{"$in"=>mac_ids}}, {"email.mac_ids"=>{"$in"=>mac_ids}} ],"timestamp"=> { "$gte" => start_date, "$lte" =>end_date} } }, {"$project"=>{"timestamp"=>{"$add" => ["$timestamp", offset.to_i]}, "visitor_detail_id"=>1}},{ "$group"=> {"_id"=> { "year"=> {"$year"=>"$timestamp"},"month"=> {"$month"=>"$timestamp"},"day"=> {"$dayOfMonth"=>"$timestamp"}, "visitor_detail_id"=>"$visitor_detail_id"},  "count"=> { "$sum" => 1 }} },{"$match" => {"count" =>{"$lte" => 1}}}) rescue []
    
    before_visited = self.collection.aggregate({"$match" => {"rl_mac_id" => {"$in" => rlids}, "$or" =>[{"facebook.mac_ids"=>{"$in"=>mac_ids}}, {"twitter.mac_ids"=>{"$in"=>mac_ids}}, {"email.mac_ids"=>{"$in"=>mac_ids}} ],"timestamp"=> { "$gte" => start_date, "$lte" =>end_date} } }, {"$project"=>{"timestamp"=>{"$add" => ["$timestamp", offset.to_i]}, "visitor_detail_id"=>1}},{ "$group"=> {"_id"=> { "year"=> {"$year"=>"$timestamp"},"month"=> {"$month"=>"$timestamp"},"day"=> {"$dayOfMonth"=>"$timestamp"}, "visitor_detail_id"=>"$visitor_detail_id"},  "count"=> { "$sum" => 1 }}},{"$match" => {"count" =>{"$gt" => 1}}}) rescue []

    return {:before_visited=>before_visited, :never_visited=>never_visited, :total_visits=>total_visits}
  end
  
  def self.user_name(visitor_obj)
    ud = visitor_obj.user_details.last
    return if ud.blank?
    return ud.social_network(ud)
    # return self.user_domain(ud["email"],visitor_obj.device_id) unless ud["email"].blank?
  end 

  def social_network(ud)
    return ud["facebook"]["name"], ud["facebook"]["fb_id"].blank? ? "fb" : "http://graph.facebook.com/"+ud["facebook"]["fb_id"]+"/picture" unless ud["facebook"].blank?
    return ud["twitter"]["name"], ud["twitter"]["image"].blank? ? "twitter" : ud["twitter"]["image"] unless ud["twitter"].blank?
    return ud["email"]["name"], "mail" unless ud["email"].blank?
  end
  def self.user_domain(ud,mac_id)
    index = ud["mac_id"].index(mac_id)
    return if index.blank?
    return ud["name"][index] 
  end
  def self.members(rlids,start_date,end_date,offset)
    self.collection.aggregate({"$match" => {"rl_mac_id" => {"$in" => rlids},"timestamp"=> { "$gte" => start_date, "$lte" =>end_date} } }, {"$project"=>{"timestamp"=>{"$add" => ["$timestamp", offset.to_i]}, "visitor_detail_id"=>1}}, { "$group"=> {"_id"=> {},"visitors"=> { "$addToSet" => "$visitor_detail_id" }}})
  end
end