import Settings, SDUtil, KB, DE, display
from time import sleep
macroLoaded = False
settingsEnabled = False
selectedEntry = 0
macroCap = ''
strVersion = '1.1'


def Main():
    global settingsEnabled, selectedEntry, macroCap
    sdLoaded = False
    
    while True:
        if SDUtil.checkForCard() and not sdLoaded:
            settingslist = SDUtil.readCard()
            if settingslist == None:
                print("Error Reading SD Card")
            else:
                print("SD Loaded")
                display.loading('SD Loaded', strVersion)
                KB.clearKeyColors()
                if macroCap in settingslist:
                    print(f"Found macroCap: {macroCap}")
                    KB.loadProfile(settingslist[macroCap])
                    display.displayMacros(settingslist[macroCap])
                else:
                    KB.loadProfile(settingslist.get(next(iter(sorted(settingslist, key =str.lower)))))
                    display.displayMacros(settingslist.get(next(iter(sorted(settingslist, key =str.lower)))))
                sdLoaded = True      
        elif not SDUtil.checkForCard() and sdLoaded:
            sdLoaded = False
            print("Card Ejected")
        DE.checkButton()
        KB.checkMacoKeys()
        while DE.checkSettingsLight():
            if not settingsEnabled:
                settingsEnabled = True
                listProfiles = list(sorted(settingslist, key =str.lower))
                KB.setKeysForProfileSelect()
                print(f"SelectedEntry: {selectedEntry}")
                display.intMenu(settingslist.get(listProfiles[selectedEntry]).caption)
                print("Setting Change Enabled")
                print(f"Loaded entry: {settingslist.get(listProfiles[selectedEntry]).caption}")
            keyPressed = KB.checkKeyPad()
            if keyPressed == "A4": #Macro Set Up
                if selectedEntry >= (len(listProfiles) - 1):
                    previousEntry = selectedEntry
                    selectedEntry = 0
                else:
                    previousEntry = selectedEntry
                    selectedEntry = selectedEntry + 1
                print(f"Loaded entry: {listProfiles[selectedEntry]}")
                display.updateMenu(settingslist.get(listProfiles[selectedEntry]).caption, settingslist.get(listProfiles[previousEntry]).caption)
            elif keyPressed == "B4": #Macro Set Down
                if selectedEntry <= 0:
                    previousEntry = selectedEntry
                    selectedEntry = len(listProfiles) - 1
                else:
                    previousEntry = selectedEntry
                    selectedEntry = selectedEntry - 1
                print(f"Loaded entry: {listProfiles[selectedEntry]}")
                display.updateMenu(settingslist.get(listProfiles[selectedEntry]).caption, settingslist.get(listProfiles[previousEntry]).caption)
            elif keyPressed == "A1": #Screen Brightness Up
                display.brightness('UP')
                display.intMenu(settingslist.get(listProfiles[selectedEntry]).caption)
                print(f"Scrn Brightness: {display.intBrightness}")
            elif keyPressed == "B1": #Screen Brightness Down
                display.brightness('DOWN')
                display.intMenu(settingslist.get(listProfiles[selectedEntry]).caption)
                print(f"Scrn Brightness: {display.intBrightness}")
            elif keyPressed == "A2": #Key Brightness Up
                KB.brightness('UP')
                KB.setKeysForProfileSelect()
                print(f"Key Brightness: {KB.intBrightness}")
            elif keyPressed == "B2": #Key Brightness Down
                KB.brightness('DOWN')
                KB.setKeysForProfileSelect()
                print(f"Key Brightness: {KB.intBrightness}")
            else:
                    pass
            DE.checkButton()
        if settingsEnabled:
            KB.clearKeyColors()
            KB.loadProfile(settingslist.get(listProfiles[selectedEntry]))
            display.displayMacros(settingslist.get(listProfiles[selectedEntry]))
            print(f"Selected entry: {listProfiles[selectedEntry]}")
            Settings.save(KB.intBrightness, display.intBrightness, listProfiles[selectedEntry])
            settingsEnabled = False
            

def Setup():
    global macroCap
    Settings.load()
    KB.intBrightness = Settings.KeyBrightness
    display.intBrightness = Settings.ScreenBrightness
    macroCap = Settings.MacroSet
    display.loading('Loading', strVersion)
    KB.keyPadSetup()
    KB.clearKeyColors()

Setup()
Main()