import time
import timeit
from threading import Thread

import plugin_interface as plugintypes

# counter for sampling rate
nb_samples_out = -1

# try to ease work for main loop
class Monitor(Thread):
	def __init__(self):
		Thread.__init__(self)
		self.nb_samples_out = -1

		# Init time to compute sampling rate
		self.tick = timeit.default_timer()
		self.start_tick = self.tick
		self.polling_interval = 10

	def run(self):
		while True:
			# check FPS + listen for new connections
			new_tick = timeit.default_timer()
			elapsed_time = new_tick - self.tick
			current_samples_out = nb_samples_out
			print "--- at t: ", (new_tick - self.start_tick), " ---"
			print "elapsed_time: ", elapsed_time
			print "nb_samples_out: ", current_samples_out - self.nb_samples_out
			sampling_rate = (current_samples_out - self.nb_samples_out)  / elapsed_time
			print "sampling rate: ", sampling_rate
			self.tick = new_tick
			self.nb_samples_out = nb_samples_out
			time.sleep(self.polling_interval)

class PluginSampleRate(plugintypes.IPluginExtended):
	# update counters value
	def __call__(self, sample):
		global nb_samples_out
		nb_samples_out = nb_samples_out + 1
	
	# Instanciate "monitor" thread
	def activate(self):
		monit = Monitor()
		if len(self.args) > 0:
			monit.polling_interval = float(self.args[0])
		# daemonize thread to terminate it altogether with the main when time will come
		monit.daemon = True
		monit.start()
		
	def show_help(self):
		print "Optional argument: polling_interval -- in seconds, default: 10."
