import directory
from EEG import EEG
from PPG import PPG
import PNG_REPORT
import PNG_EBSI

import traceback
import os
import sys
import json
import time
import shutil
import datetime
import PDF_ALL

# filename
# device
# sex
# age

if __name__ == "__main__":
    start_time = time.perf_counter()
    RESULT_DIR = '/home/ubuntu/temp/'
    file_eeg = sys.argv[1]      #뇌파 파일
    file_ppg = sys.argv[2]      #맥파 파일
    deviceEEG = sys.argv[3]    #측정기기 
    devicePPG = sys.argv[4]    #측정기기
    number = sys.argv[5]    #넘버
    date = sys.argv[6]
    name = sys.argv[7]      #이름
    sex = sys.argv[8]       # 성별, M - 남자 , F - 여자
    age = sys.argv[9]       # 나이(만)
    depressed = float(sys.argv[10])  # K-DEP, 우울장애
    unrest = float(sys.argv[11])  # K-ANX, 불안장애
    reportLanguage = sys.argv[12] #REPORT 언어
    RESULT_DIR = sys.argv[13] # 저장 PATH
    password = sys.argv[14] # PDF password 여부
    birth = sys.argv[15] # PDF password (사용자 생년월일)
    eeg_only = bool(int(sys.argv[16])) # eeg 레포트만 여부
    ppg_only = bool(int(sys.argv[17])) # ppg 레포트만 여부
    ebsi = bool(int(sys.argv[18])) # EBSI 레포트 생성 여부
    msn = sys.argv[19] # CECLAB 구분하기 위해 받음
    
    current_time = str(round(datetime.datetime.utcnow().timestamp() * 1000))
    
    # 일괄생성시 설문지는 같고 파일이 다를 경우를 대비하여 폴더이름에 시간 추가
    RESULT_DIR = os.path.join(RESULT_DIR, current_time + name)
    directory.createFolder(RESULT_DIR)
    print("RESULT_DIR joined = {}".format(RESULT_DIR))

    if (eeg_only==False) and (ppg_only==False):
        eeg = EEG(file_eeg, RESULT_DIR, age=age, device=deviceEEG)
        try:
            eeg.run_function_eeg()
            eeg.report['eeg_code'] = 1
            print("EEG OK")
        except Exception as e:  
            print(traceback.format_exc())
            ppg_only=True
        eeg_json_val = json.dumps(eeg.report)
        print(eeg_json_val)
        
        ppg = PPG(file_ppg, RESULT_DIR, age=age, device=devicePPG, depressed=depressed, unrest=unrest,
                  reportLanguage=reportLanguage)
        try:
            ppg.run_function_ppg()
            ppg.report['ppg_code'] = 1
            print("PPG_OK")
        except Exception as e:
            print(traceback.format_exc())
            eeg_only=True
        ppg_json_val = json.dumps(ppg.report)
        print(ppg_json_val)

    elif eeg_only == True:
        eeg = EEG(file_eeg, RESULT_DIR, age=age, device=deviceEEG)
        eeg.report['ppg_code'] = 1
        eeg.report['ppgScore'] = 0
        eeg.report['ppgOnlyScore'] = 0
        eeg.report['dataQuality_ppg'] = None
        eeg.report['ppg_subtype'] = None
        try:
            eeg.run_function_eeg()
            eeg.report['eeg_code'] = 1
            print("EEG OK")
        except Exception as e: 
            eeg.report = None
            print(traceback.format_exc())
        eeg_json_val = json.dumps(eeg.report)
        print(eeg_json_val)

    elif ppg_only == True:
        ppg = PPG(file_ppg, RESULT_DIR, age=age, device=devicePPG, depressed=depressed, unrest=unrest, reportLanguage=reportLanguage)
        ppg.report['eeg_code'] = 1
        ppg.report['eegScore'] = 0
        ppg.report['dataQuality_eeg'] = None
        ppg.report['eeg_subtype'] = None
        try:
            ppg.run_function_ppg()
            ppg.report['ppg_code'] = 1
        except Exception as e: 
            ppg.report = None
            print(traceback.format_exc())
        ppg_json_val = json.dumps(ppg.report)
        print(ppg_json_val)

    report_ok = {'result': 1, 'ebsi': 0}

    try:
    
        PNG_REPORT.make_report_two_files(file_eeg,file_ppg, RESULT_DIR, depressed, unrest, number, name, directory.sex_modify(sex, reportLanguage=reportLanguage), age, date,
                        eeg_only=eeg_only, ppg_only=ppg_only, reportLanguage=reportLanguage, msn=msn)
        PNG_EBSI.make_ebsi_two_files(file_eeg,file_ppg, RESULT_DIR, age=age, sex=directory.sex_modify(sex, reportLanguage=reportLanguage), number=number, name=name, date=date, eeg_only=eeg_only, ppg_only=ppg_only, reportLanguage=reportLanguage, msn=msn)
    except:
        print(traceback.format_exc())
        report_ok['result'] = -2009

    try:
    
        PDF_ALL.make_pdf(RESULT_DIR, number+"_"+name, password=password, birth=birth, eeg_only=eeg_only, ppg_only=ppg_only, msn=msn)
    except:
        #print(traceback.format_exc())
        report_ok['result'] = -2009
    # try:
    #     PNG_REPORT.make_report_two_files(file_eeg, file_ppg, RESULT_DIR, depressed, unrest, number, name, directory.sex_modify(sex, reportLanguage=reportLanguage), age, date,
    #                        eeg_only=eeg_only, ppg_only=ppg_only, reportLanguage=reportLanguage, msn=msn)
    # except:
    #     report_ok['result'] = -2009

    # try:    
    #     PDF.make_pdf(RESULT_DIR, number+"_"+name, password=password, birth=birth, eeg_only=eeg_only, ppg_only=ppg_only)
    # except:
    #     report_ok['result'] = -2009
    # if ebsi == True:
    #     try:
    #         PNG_EBSI.make_ebsi_two_files(file_eeg, file_ppg, RESULT_DIR, age=age, sex=directory.sex_modify(sex, reportLanguage=reportLanguage), number=number, name=name, date=date, eeg_only=eeg_only, ppg_only=ppg_only, reportLanguage=reportLanguage)
    #     except:
    #         report_ok['ebsi'] = -2010
    #     try:
    #         PDF.make_ebsi_pdf(RESULT_DIR, number+"_"+name, password=password, birth=birth, eeg_only=eeg_only, ppg_only=ppg_only)
    #     except:
    #         report_ok['ebsi'] = -2010        

    report_ok = json.dumps(report_ok) 
    print(report_ok)

    try:           
        os.remove(os.path.join(RESULT_DIR, os.path.join(RESULT_DIR, file_eeg.split('/')[-1][:-4] + '_eeg.csv')))
        os.remove(os.path.join(RESULT_DIR, os.path.join(RESULT_DIR, file_ppg.split('/')[-1][:-4] + '_ppg.csv')))
    except FileNotFoundError:
        pass    

    shutil.rmtree(RESULT_DIR)

    end_time = time.perf_counter()
    print(f"python time elapsed : {int(round((end_time - start_time) * 1000))}ms")

