import sdcard, uos, os, machine, neopixel, KB
from time import sleep
macroProfiles = {}
SDCardDetect = 20
CSPin = 17
 # Intialize SPI peripheral (start with 1 MHz)
spi = machine.SPI(0,
                  baudrate=1000000,
                  polarity=0,
                  phase=0,
                  bits=8,
                  firstbit=machine.SPI.MSB,
                  sck=machine.Pin(18),
                  mosi=machine.Pin(19),
                  miso=machine.Pin(16))
#cardPin = machine.Pin(20, machine.Pin.IN)

def checkForCard():
    cardPin = machine.Pin(SDCardDetect, machine.Pin.IN)
    #print(f"cardPin.value entry: {cardPin.value()}")
    return cardPin.value()
    
def readCard():
    global macroProfiles
    # Assign chip select (CS) pin (and start it high)
    print("Reading card")
    #try:
    cs = machine.Pin(CSPin, machine.Pin.OUT)

    # Initialize SD card
    try:
        sd = sdcard.SDCard(spi, cs)
    except:
        return

    # Mount filesystem
    vfs = uos.VfsFat(sd)
    try:
        uos.mount(vfs, "/sd")
    except:
        uos.umount("/sd")
        uos.mount(vfs, "/sd")
    arrGroupSettings = []
    for fileitem in sorted(uos.listdir('/sd'), key =str.lower):
        if not (fileitem == "System Volume Information") and not (fileitem == "Template.txt"):
            if fileitem.count(".txt") == 1:
                tmp = fileitem.split(".", 1)
                macroFileName = tmp[0]
                settingslist = []
                with open("/sd/" + fileitem, "r") as file:
                    fileitemline = file.readline()
                    while fileitemline:
                        if fileitemline[0].strip() == "[":
                            fileitemline = fileitemline.replace("[","")
                            fileitemline = fileitemline.replace("]","")
                            tmpsettingclass = fileitemline.strip().upper()
                            fileitemline = file.readline()
                            if tmpsettingclass == "GLOBAL": objGroup = KB.GroupSettings(macroFileName)
                            if tmpsettingclass != "GLOBAL": objKey = KB.Key(tmpsettingclass)
                            while fileitemline.count("=") >= 1:
                                settingline = fileitemline.split("=", 1)
                                if tmpsettingclass == "GLOBAL":
                                    if settingline[0].upper() == "CAPTION":
                                        objGroup.caption = settingline[1].strip()
                                    if settingline[0].upper() == "COLOR":
                                        objGroup.color = settingline[1].strip()
                                else:
                                    if settingline[0].upper() == "COLOR":
                                        objKey.color = settingline[1].strip()
                                    if settingline[0].upper() == "CAPTION":
                                        objKey.caption = settingline[1].strip()
                                    if settingline[0].upper() == "MACRO":
                                        tmpmacro = settingline[1].strip()
                                        objKey.macroTXT = tmpmacro.strip('\n')
                                del settingline
                                fileitemline = file.readline()
                            if tmpsettingclass != "GLOBAL":
                                if (objKey.macroTXT != None and objKey.macroTXT != "") and (objKey.color == "" or objKey.color == None):
                                    objKey.color = objGroup.color
                                if objKey.macroTXT != None or objKey.macroTXT != "":
                                    settingslist.append(objKey)
                        else:
                            print("Else", fileitemline)
                            fileitemline = file.readline()
                    objGroup.keys = settingslist
                    arrGroupSettings.append(objGroup)
                        

                #objGroup.keys = settingslist
                macroProfiles[macroFileName] = objGroup
                file.close()
                
    uos.umount("/sd")    
    spi.deinit()
#     for groupsetting in arrGroupSettings:
#         groupsetting.showvalues()
    return macroProfiles