# Christian Fiot 2021
# trap
#


import machine # import SD
import os
import sys
import utime


# breakThread = True
fStat = 1
fsizeErrLog = 2    #  import trap       trap.fsizeErrLog
fsizeSmpLog = 3    #  import trap       trap.fsizeSmpLog


wdt = machine.WDT(timeout=30*1000)


# 2.2.9b
# rw = 3   return file size
# rw = 0   append "scratch" to file
# rw = 1   dump file to console  !!! it may takes a long time if the file is big !!!
# rw = 2   delete the file
def file_errLog(rw, scratch = "", sdAccess = False):  # file_errLog(1, "", True)
    global fsizeErrLog, fStat

    year, month, day, hour, min, sec, u7, u8 = utime.localtime()
    dateTime = ' [{:0>4}.{:0>2}.{:0>2}-{:0>2}.{:0>2}.{:0>2}]'.format( year, month, day, hour, min, sec)
    scratch = scratch + dateTime

    if rw == 0:
        print('\r\n' + scratch)
        wdt.init(2*60*1000) # 2.2.10b  allow 2 min to recover if program is going to end up crashing

    if sdAccess == False:  # if sdAvailable == False:    #  sdAccess = sdAvailable
        return 0

    try:
        fStat = os.stat('/sd/errLog.txt')
        fsizeErrLog = fStat[6]

    except:
        utime.sleep(1)
        f = open('/sd/errLog.txt', 'x')
        print('Create errLog.txt')
        fsizeErrLog = 0

    try :
        if rw == 0:  # write file
            f = open('/sd/errLog.txt', 'a')
            f.write(scratch + "\r\n")
            f.close()

        if rw == 1: # read file
            f = open('/sd/errLog.txt', 'r')
            print('ErrLog Report file:/sd/errLog.txt')
            data = f.read()
            print('End of report')
            f.close()
            return data

        if rw == 2: # delete file
            os.remove('/sd/errLog.txt')
            print('Delete errLog.txt')
            fsizeErrLog = 0

    except :
        print('Failed access errLog.txt file')
        fsizeErrLog = -1

    return fsizeErrLog



# file_errLog(1) # 2.2.9b


def tesTraptErr():
    try:
        1 / 0
        pass

    except Exception as e:
        # print ("tesTraptErr: " + str(e))
        file_errLog(0, "tesTraptErr - " + str(e))
        pass


# 2.2.10b  ~400K per 6h -> 2.4MByte / day
# rw = 3   return file size
# rw = 0   append "scratch" to file
# rw = 1   dump file to console  !!! it may takes a long time if the file is big !!!
# rw = 2   delete the file

def file_smpLog(rw, scratch = "", sdAccess = False):  # file_smpLog(1, "", True)
    global fsizeSmpLog, fStat

    if sdAccess == False:
        return  0

    try:
        fStat = os.stat('/sd/smpLog.txt')
        fsizeSmpLog = fStat[6]
        # print ("file_smpLog get stat " + str(fstat))

    except:
        f = open('/sd/smpLog.txt', 'x')
        print('Create smpLog.txt')
        fsizeSmpLog = 0

    try :
        if rw == 0:  # write file
            # print ("file_smpLog : " + scratch)
            U1 = len(scratch) # 2.2.24
            f = open('/sd/smpLog.txt', 'a')
            f.write(str(scratch) + "\r\n")
            f.close()
            scratch = "WR smpLog - Idx: " + str(fsizeSmpLog) + " - LData: " + str(U1) # 2.2.24
            fStat = os.stat('/sd/smpLog.txt') # 2.2.24
            U2 = fStat[6] # 2.2.24
            if (U2 == (fsizeSmpLog + U1 + 2)): # 2.2.24
                print( scratch + " Checked !")
            else:
                file_errLog(0, "file_smpLog err - " + scratch, True)

        if rw == 1: # read file           f = open('/sd/smpLog.txt', 'r')
            print('SmpLog Report file:/sd/smpLog.txt')
            f = open('/sd/smpLog.txt', 'r')  # 2.2.26
            print(f.read())
            print('End of report')
            f.close()

        if rw == 2: # delete file
            os.remove('/sd/smpLog.txt')
            print('Delete smpLog.txt')
            fsizeSmpLog = 0

    except Exception as e:
        # print('Failed access smpLog.txt file')
        file_errLog(0, "Failed access smpLog.txt file - " + str(e), sdAccess)
        fsizeSmpLog = -1

    return fsizeSmpLog
