import cryptobox.plugins.base


class date(cryptobox.plugins.base.CryptoBoxPlugin):

	pluginCapabilities = [ "system" ]
	pluginVisibility = [ "preferences" ]
	requestAuth = False
	rank = 10

	def doAction(self, store=None, year=None, month=None, day=None, hour=None, minute=None):
		import datetime
		if store:
			try:
				year, month, day = int(year), int(month), int(day)
				hour, minute = int(hour), int(minute)
				new_date = datetime.datetime(year, month, day, hour, minute)
			except ValueError:
				self.hdf["Data.Warning"] = "Plugins.date.InvalidDate"
				self.__prepareFormData()
				return "form_date"
			date = "%02d%02d%02d%02d%d" % (month, day, hour, minute, year)
			if self.__setDate(date):
				self.cbox.log.info("changed date to: %s" % date)
				self.hdf["Data.Success"] = "Plugins.date.DateChanged"
				return None
			else:
				## a failure should usually be an invalid date (we do not check it really)
				self.cbox.log.info("failed to set date: %s" % date)
				self.hdf["Data.Warning"] = "Plugins.date.InvalidDate"
				self.__prepareFormData()
				return "form_date"
		else:
			self.__prepareFormData()
			return "form_date"


	def getStatus(self):
		now = self.__getCurrentDate()
		return "%d/%d/%d/%d/%d/%d" % (now.year, now.month, now.day, now.hour, now.minute, now.second)


	def __prepareFormData(self):
		date = self.__getCurrentDate()
		self.hdf[self.hdf_prefix + "year"]	= date.year
		self.hdf[self.hdf_prefix + "month"]	= date.month
		self.hdf[self.hdf_prefix + "day"]	= date.day
		self.hdf[self.hdf_prefix + "hour"]	= date.hour
		self.hdf[self.hdf_prefix + "minute"]	= date.minute


	def __getCurrentDate(self):
		import datetime
		return datetime.datetime(2000,1,1).now()
	

	def __setDate(self, date):
		import subprocess
		import os
		proc = subprocess.Popen(
			shell = False,
			args = [
				self.cbox.prefs["Programs"]["super"],
				self.cbox.prefs["Programs"]["CryptoBoxRootActions"],
				"plugin",
				os.path.join(self.pluginDir, "root_action.py"),
				date])
		proc.wait()
		return proc.returncode == 0

