import sys
import datetime
import mysql.connector

import default_setting

def main(orderDate, orderTime, orderDest):
	return timeSlot(orderDate, orderTime, orderDest)

def timeSlot(orderDate, orderTime, orderDest):

	print("IN:",orderDate,orderTime,orderDest)

	year, month, day = (int(x) for x in orderDate.split('-'))  

# Get Day No. & Date Objects  
	dayNo = datetime.datetime(year, month, day).weekday()
	dayDt = datetime.datetime(year, month, day)
	dayTm = orderTime

# print(datetime.datetime(year, month, day).weekday(),'-',orderTime)

	defaults = default_setting.defaultSettings()
	cnx = mysql.connector.connect(user=defaults['dbuser'], password=defaults['dbpwd'],host=defaults['dbhost'],database=defaults['dbase'])
	cursor = cnx.cursor(dictionary=True)

	i = 0
# Loop through Time Slots looking for earliest available date / time
	while(dayNo >= 0):
		d = ((dayNo+1)*2)-1
		dataQuery = "SELECT id AS id, time_slot AS time_slot, working_days AS working_days FROM time_slot_master WHERE destination = '"+orderDest+"' AND time_slot<='"+str(dayTm)+"' AND substr(working_days,"+str(d)+",1)='1' ORDER BY destination, time_slot DESC LIMIT 1"
# print ("bdyQry-",dataQuery)
		try:
			cursor.execute(dataQuery)
			row = cursor.fetchone()
		except mysql.connector.Error as err:
			print("mysql Error: {}".format(err))
		if (row is None):
# Previous Day
			dayDt = dayDt - datetime.timedelta(days=1)
			dayTm = '23:59:59'
			if (dayNo == 0):
				if (i > 0):
					break
				dayNo = 6
				i = 1
			else:
				dayNo = dayNo-1
		else:
			break
# timeslot not found - find earliest
	if (row is None):
		dayDt = datetime.datetime(year, month, day)
		dataQuery = "SELECT id AS id, time_slot AS time_slot, working_days AS working_days FROM time_slot_master WHERE destination = '"+orderDest+"' ORDER BY destination, time_slot LIMIT 1"
		try:
			cursor.execute(dataQuery)
			row = cursor.fetchone()
		except mysql.connector.Error as err:
			print("mysql Error: {}".format(err))

	if (row is not None):
		orderTime = "00000000"+str(row['time_slot'])
		orderTime = orderTime[-8:]

	cursor.close()
	
	print("OUT:",str(dayDt)[0:10],orderTime)
	
# Format Timeslot
	timeSlot = (str(dayDt)[0:10])+" "+str(orderTime)
	return timeSlot

# Initial / default Process
# orderDate = sys.argv[1][0:11]
# orderTime = sys.argv[2][0:9]
# orderDest = sys.argv[3]

if __name__ == '__main__':
	main(orderDate, orderTime, orderDest)
	
# workingDays = []
# workingDays = row['working_days'].split(',')
# print("TIMESLOT:",row['time_slot'],"-",row['working_days'],"-",workingDays[dayNo],"-",row['working_days'][dayNo*2],"-",dayNo)
