#%%Imports and setup
from os import mkdir, getcwd
from tkinter import Tk, Label, Entry, Button, mainloop

#%% Configuration
workingDir = ''
semesterName = ''
subjects = ['']
numberOfWeeks = 0
studentName = ''

#%% Define function to create folders

def createFolders():#workingDir, semesterName, subjects, numberOfWeeks, studentName):

    # Get all parameters:
    workingDir = workingDirEntryField.get()
    semesterName = semesterNameEntryField.get()
    subjects = subjectsEntryField.get().split(',')
    numberOfWeeks = int(numberOfWeeksEntryField.get())
    studentName = studentNameEntryField.get()

    # Generate semester folder:
    mkdir(f'{workingDir}\\{semesterName}')

    for subject in subjects:
        # Generate lecture folder:
        mkdir(f'{workingDir}\\{semesterName}\\{subject}')
        # Generate Altklausuren-folder in each lecture-folder:
        mkdir(f'{workingDir}\\{semesterName}\\{subject}\\Altklausuren')
        for week in range(1, numberOfWeeks+1):
            # Generate folder for each week's sheet in each lecture folder:
            mkdir(f'{workingDir}\\{semesterName}\\{subject}\\Blatt{week}')
            # Generate empty (non readable) PDF-file as a template to save each week's submission in PDF-format:
            with open(f'{workingDir}\\{semesterName}\\{subject}\\Blatt{week}\\{subject}_Blatt{week}_{studentName}.pdf', 'w') as file:
                file.write('')

#%% Create window

# Config:
entryFieldWidth = 40
labelWidth = 10

# Defaults:
defaultDirectory = getcwd()
defaultSemester = ''
defaultLectures = 'EX,THEO'
defaultWeeks = '12'
defaultName = 'MaxMustermann'

# Instantiate window:
root = Tk()
root.title('FolderMaker')

# Generate text labels:
Label(root, text="Directory:",width=labelWidth).grid(row=0)
Label(root, text="Semester:",width=labelWidth).grid(row=1)
Label(root, text="Lectures:",width=labelWidth).grid(row=2)
Label(root, text="Weeks:",width=labelWidth).grid(row=3)
Label(root, text="Name:",width=labelWidth).grid(row=4)

# Generate entry fields:
workingDirEntryField = Entry(root, width=entryFieldWidth)
semesterNameEntryField = Entry(root, width=entryFieldWidth)
subjectsEntryField = Entry(root, width=entryFieldWidth)
numberOfWeeksEntryField = Entry(root, width=entryFieldWidth)
studentNameEntryField = Entry(root, width=entryFieldWidth)

# Place all entry fields properly:
workingDirEntryField.grid(row=0, column=1)
semesterNameEntryField.grid(row=1, column=1)
subjectsEntryField.grid(row=2, column=1)
numberOfWeeksEntryField.grid(row=3, column=1)
studentNameEntryField.grid(row=4, column=1)

# Set default values in entry fields:
workingDirEntryField.insert(0, defaultDirectory)
semesterNameEntryField.insert(0, defaultSemester)
subjectsEntryField.insert(0, defaultLectures)
numberOfWeeksEntryField.insert(0, defaultWeeks)
studentNameEntryField.insert(0, defaultName)

# Generate buttons with their corresponding functions:
Button(root, text='Quit', command=root.quit, width=labelWidth).grid(row=5, column=0, pady=4)
Button(root, text='Create', command=(lambda: createFolders()), width=entryFieldWidth).grid(row=5, column=1, pady=4) # Lambda-function here, so the command is not executed on instantiation

mainloop()