class VisitorTimeHopeWorker
  include Sidekiq::Worker
  def perform(vd_id,rl_mac_id)
  	y = VisitorDetail.find(vd_id)  rescue return
  	unless y.blank?
    	ust = y.user_stayed_times.last
			if ust.blank?
				vt = y.visitor_timings
				l_time = vt.last.timestamp.blank? ? Time.zone.now : vt.last.timestamp
				ust = y.user_stayed_times.create({:starttime=>l_time,:endtime=>l_time, :stayedtime=>0, :created_at=>Time.zone.now,:rl_mac_id=>rl_mac_id, :vd_mac_id=>y.device_id })
			else
				vt = y.visitor_timings.where(:timestamp => {:$gt => ust.endtime.utc})
				(vt || []).each do |x|
					secs = (x.timestamp.utc - ust.endtime.utc)
					if(secs > APPLICATION['defaults']['users_session_time'])
						
						# ppl = PplcountBfrAfrTime.find_or_create_by({"ap"=>rl_mac_id, "t"=>ust.starttime.to_date})
						# bl = Blocklist.where(:ap=> rl_mac_id, :vap=>{"$in"=>[y.device_id]})
						# stayed_time_range((ust.endtime.utc - ust.starttime.utc),ppl) if((ust.endtime.utc - ust.starttime.utc) > 0) if(bl.blank?)

						ust = y.user_stayed_times.create({:starttime => x.timestamp,:endtime => x.timestamp, :created_at=>Time.zone.now,:rl_mac_id=>rl_mac_id, :vd_mac_id=>y.device_id, :return_flag=>1, :stayedtime=>0})
					else
						stm = (x.timestamp.utc - ust.starttime.utc)
						ust.update_attributes({:endtime => x.timestamp, :stayedtime =>stm})

						# RealTimeEmailWorker.perform_async(y.device_id, rl_mac_id) if(stm > APPLICATION['defaults']['real_time_email_session'])

						if(stm > APPLICATION['defaults']['blocklist_time'])
							bl = Blacklist.find_or_create_by(:ap=> rl_mac_id)
							bl.push(:vap=>y.device_id) unless (bl.vap.include?(y.device_id))
						end
						VisitorCompareLoginWorker.delay_for(30.minutes).perform_async(ust.id) if(ust.register_flag != 1)
					end
				end
			end
		end
	end

	def stayed_time_range(secs,ppl)
		five_min = 0; fifteen_min =0;thirty_min=0;fortyfive_min=0;one_hour = 0;one_hourplus = 0;
    case secs.to_f
        when 1..300; five_min = 1
        when 301..900; fifteen_min = 1
        when 901..1800; thirty_min = 1
        when 1801..2700; fortyfive_min = 1
        when 2701..3600; one_hour = 1
        when secs.to_f > 3600; one_hourplus = 1
    end
    ppl.inc({"ppl.1-5min"=>five_min,"ppl.6-15min"=>fifteen_min,"ppl.16-30min"=>thirty_min,"ppl.31-45min"=>fortyfive_min,"ppl.46-60min"=>one_hour,"ppl.1+hr"=>one_hourplus})
  end
end


# usts = UserStayedTime.where(:stayedtime.gt=> 3600.0)
# @starttime = "";@endtime=""
# (usts || []).each do |ust|
# stayedtime = ust.stayedtime
# while stayedtime > 0.0 do
# if(stayedtime>3600.0)
# @starttime = ust.starttime if @starttime.blank?
# @endtime = @starttime + 1.hour
# new_ust = UserStayedTime.create({:starttime=>@starttime, :endtime=>@endtime, :stayedtime=>3600, :created_at=>ust.created_at, :rl_mac_id=>ust.rl_mac_id, :vd_mac_id=>ust.vd_mac_id, :register_flag=>ust.register_flag, :stayed_flag=>ust.id, :visitor_detail_id=>ust.visitor_detail_id })
# @starttime = new_ust.endtime
# stayedtime -= 3600.0 if((stayedtime - 3600.0) > 0)
# else
# ust.update_attributes({:starttime=>@starttime, :endtime=>@endtime, :stayedtime=>(@endtime-@starttime)})
# stayedtime = 0
# end
# end
# end
