# ------------------------------------------------------------------------------
# Convert Order Date to Timeslot
# 2021-02-26 - increase timeslot-dock to 2 chars.
# ------------------------------------------------------------------------------

import sys
import datetime
import mysql.connector

import default_setting

def main(orderDate, orderTime, orderDest,orderType):
    return timeSlot(orderDate, orderTime, orderDest,orderType)

def timeSlot(orderDate, orderTime, orderDest,orderType):

    print("IN:",orderDate,orderTime,orderDest,orderType)

    year, month, day = (int(x) for x in orderDate.split('-'))  

# 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)
# Check if timeslot destination exists
    dataQuery = "SELECT id FROM time_slot_master WHERE substr(destination,1,1) = substr('"+orderDest+"',1,1) LIMIT 1"
    try:
        cursor.execute(dataQuery)
        row = cursor.fetchone()
    except mysql.connector.Error as err:
        print("mysql Error: {}".format(err))
#    if (row is None):
#        return ""
	
    i = 0
# Full Destination
# Get Day No. & Date Objects  
    dayNo = datetime.datetime(year, month, day).weekday()
    dayDt = datetime.datetime(year, month, day)
    dayTm = orderTime
# 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 order_type='"+orderType+"' 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+"' AND order_type='"+orderType+"' 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 None):
# Partial Destination
# Get Day No. & Date Objects  
        dayNo = datetime.datetime(year, month, day).weekday()
        dayDt = datetime.datetime(year, month, day)
        dayTm = orderTime
        orderDest = orderDest[0:1]
# 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 order_type='"+orderType+"' 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+"' AND order_type='"+orderType+"' 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,orderType)
	
# workingDays = []
# workingDays = row['working_days'].split(',')
# print("TIMESLOT:",row['time_slot'],"-",row['working_days'],"-",workingDays[dayNo],"-",row['working_days'][dayNo*2],"-",dayNo)
