import PySimpleGUI as sg
import csv
import pandas as pd
import helperFunctions as HF
from datetime import datetime, timedelta

def subManualWin(subRequestsArchiveFilename,defaultFont):

	#Pull all names and section titles for the poopulation of the drop-down boxes
	allnames=['']+HF.getAllNames()
	sections=HF.getAllSectionTitles()

	#Define the window's layout
	layout=[[sg.Text("Email?| Sec   | Date   | Replacee                        | Replacement")],
		[sg.Checkbox('',size=(3,1),key='-EMAILCHECK-'),sg.Combo(sections,size=(7,1),key="-SECTION-",readonly=True, enable_events=True),sg.Combo([""],size=(6,1),key='-DATE-',readonly=True, enable_events=True),sg.Combo([""],size=(30,1),key="-REPLACEE-", enable_events=True,readonly=True),sg.Combo(allnames,size=(30,1),key="-REPLACEMENT-", enable_events=True,readonly=True)],
		[sg.Text("Reason for manual change: "),sg.Input(key='-REASON-')],
		[sg.Button("Close"),sg.Button("Make Change")]]

	# Create the Window
	window = sg.Window('Manual Substitution', layout, font=defaultFont,resizable=True)

	#Event Loop to process "events" and get the "values" of the inputs
	#Cease running if they close the window
	event=-1
	while event != sg.WIN_CLOSED and event != "Close":
		event, values = window.read()
		
		#If the 'section' box is interacted with and is not blank (i.e. an option was selected from the dropdown box)
		if event=="-SECTION-" and values['-SECTION-']!="":
			sec=values['-SECTION-']
			dates=HF.getDatesFromSection(sec)
			window["-DATE-"].update(values=dates)#update the dropdown box of dates with the appropriate values for this section
			window["-REPLACEE-"].update(values=[""])
			
		#If the 'date' box is interacted with and is not blank (i.e. an option was selected from the dropdown box)
		if event=="-DATE-" and values['-DATE-']!="":
			date=values["-DATE-"]
			names=list(HF.getAllNamesFromSection(sec,date))[0]
			window["-REPLACEE-"].update(values=names)#update the dropdown box of names with the appropriate values for this section/date combo
			
		#Button was pressed to process the manual change
		if event == "Make Change":
			sec=values['-SECTION-']
			date=values["-DATE-"]
			replacee=HF.nameToID(values["-REPLACEE-"])
			replacement=HF.nameToID(values["-REPLACEMENT-"])
			
			timeStamp=str(datetime.now())#Consider the submission time to be right now, when the button was pressed.
			request=[timeStamp,replacee,sec,date,replacement,values["-REASON-"],"APP","MANUALLY CHANGED BY COURSE ADMINS"]#create a request in the style of the Google form, for archiving purposes
				
			HF.reassign(date,sec,replacee,replacement)#Actually perform the replacement
				
			#Send the email confirmations out to the relevant parties
			#NOTE: This is BEFORE the writing step so that if there's an error in emails (such as failed to authenticate) the code aborts BEFORE writing chnages to the database.
			if values['-EMAILCHECK-']:
				HF.generateEmails([request])
				
			#write to the archive database
			with open(subRequestsArchiveFilename,'a', newline='') as f:
				writer = csv.writer(f)
				writer.writerows([request])
				
			#Reset the dropdowns to the original options
			window["-SECTION-"].update(values=sections)
			window["-DATE-"].update(values=[""])
			window["-REPLACEE-"].update(values=[""])
			window["-REPLACEMENT-"].update(values=allnames)
		
		
		
	window.close()