#exec(open("auxMatlabEx.py").read())

def smeCriaFilNomeComData (pref, suf="", ext=""):
    from datetime import datetime
    from zoneinfo import ZoneInfo
    s1 = str(datetime.now(tz=ZoneInfo("UTC")))
    s1 = s1[:s1.rfind("+")]
    s1 = s1.replace(" ", "").replace(":", "").replace(".", "").replace("-", "")
    if pref != "": s1 = f"{pref}_{s1}"
    if suf != "": s1 = f"{s1}_{suf}"
    if ext != "": s1 = f"{s1}.{ext}"

    return s1


def runMatlabFromPython (date1, date2, dirOut, delFiles=False):
    import os
    import platform    #platform.system() Linux ou Windows
    import socket
    import smeUtils
    
    if platform.system() == 'Linux':
        crisesDir = "/home/Samuel_Extern/Dropbox/Economia/Crises"
        tmpDir = "/tmp/Economia"
        matlabName = "matlab18b" if socket.gethostname() == "label2" else "matlab"
    else:
        crisesDir = ""
        tmpDir = ""
        matlabName = "matlab"

    if dirOut[-1] != os.sep: dirOut = dirOut + os.sep
    
    if not os.path.isdir(tmpDir):
        os.makedirs(tmpDir ,0o700)

    fname = smeCriaFilNomeComData("execMatlab_")
    fname1 = tmpDir + os.sep + fname + ".bin"
    fname2 = crisesDir + os.sep + fname + ".m"
    fname3 = tmpDir + os.sep + fname + ".fname"

    print(f"fname: {fname}\nfname1: {fname1}\nfname2: {fname2}\nfname3: {fname3}\ndirOut: {dirOut}\nmatlabName: {matlabName}")
    
    with open(fname1, "wt") as f1:
        f1.write("#! /bin/bash\n")
        f1.write("cd /home/Samuel_Extern/Dropbox/Economia/Crises\n")
        f1.write(f"{matlabName} -noFigureWindows -r \"try; run('{fname2}'); catch; end; quit\"\n")

    with open(fname2, "wt") as f1:
        f1.write(f"fname = \"{fname3}\";\n")
        f1.write(f"[dimC, diasIF, fname4] = SaveCoordFromFData (\"{date1}\", \"{date2}\", \"{dirOut}\", 1);\n")
        f1.write(f"f1=fopen(\"{fname3}\",\"wt\");\n")
        f1.write(f"fprintf(f1, fname4);\n")
        f1.write("fclose(f1);\n")
    
    os.chmod(fname1,0o700)
    os.chmod(fname2,0o700)

    os.system(fname1)

    with open(fname3, "rt") as f1:
        fnameNY = f1.readline()

    if delFiles == 1:
        if len(fname1) > 20: os.remove(fname1)
        if len(fname2) > 20: os.remove(fname2)
        if len(fname3) > 20: os.remove(fname3)
    
    return fnameNY
    

