'''
Author: seven 865762826@qq.com
Date: 2023-09-30 13:21:25
LastEditors: seven 865762826@qq.com
LastEditTime: 2023-10-10 18:19:56
FilePath: \python_excelTest\TSExcelConver.py
Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
'''
import json
import time
import openpyxl
from openpyxl import load_workbook
from .ConstValuesMod2 import *
import os

_curr_path = os.path.dirname(__file__)

class ExcelConverMod2:
    def __init__(self, inputFileName,outputFileName):
        self.TestCaseinfo = {}
        self.inputFileName = inputFileName
        self.outputFileName = outputFileName
        # self.SetTable = {}
        # self.GetTable = {}
        # self.APITable = {}
        # self.EXPTable = {}
        self.ProgramTable = {}
        self.NOP = {
            TSstepname : "CheckError",
            TScomment  : "CheckError",
            TSConfiguration : "1;0;0",
        }
        self.JMP = {
            TSstepname : "CheckErrorJMP",
            TScomment  : "CheckErrorJMP",
            TSConfiguration : "lbl",
        }
        self.FROM = {
            TSstepname : "CheckErrorFROM",
            TScomment  : "CheckErrorFROM",
            TSConfiguration : "lbl",
        }
        self.lblIdx = 0
        self.__StartRow = 2
        self.__StartCol = 1
        self.__defCol = 10
        self.Ret = True
        self.Ret = self.parse_excel()
        # self.creat_excel()
        # if IS_Save_TestCaseInfo:
        #     self.save_testcase_info()
    def parse_excel(self):
        ret = False
        EPStart_Row = self.__StartRow
        EPStart_Col = self.__StartCol
        DefStart_Row = self.__StartRow - 1
        def_col = self.__defCol
        wb = load_workbook(self.inputFileName)
        workbook = openpyxl.Workbook()
        main_sheet = workbook.active
        main_sheet.title = "Main"
        main_sheet['A1'] = "EP"
        main_sheet.cell(DefStart_Row,def_col+EP2Def).value = "Def"
        main_sheet.cell(DefStart_Row,def_col+EP2Name).value = "Name"
        main_sheet.cell(DefStart_Row,def_col+EP2Comment).value = "Comment"
        main_sheet.cell(DefStart_Row,def_col+EP2Conf).value = "Configuration"
        DefStart_Row += 1
        sheets = wb.worksheets
        for sheet in sheets:
            if sheet.title.lower()== 'main2':
                ret = True
                for idx in range(STEPNUMBER,sheet.max_row+1):
                    actionName = sheet.cell(idx,STEPNUMBER).value
                    condtion = sheet.cell(idx,STEPNAME).value
                    if actionName!= None:
                        if actionName.lower() == SET and condtion != None:
                            SetInfo = {}
                            SetInfo[TSstepname] = sheet.cell(idx,STEPNAME).value
                            SetInfo[TScomment] = sheet.cell(idx,COMMENT).value
                            SiganlCount = int(sheet.cell(idx,SIGNALCOUNT).value)
                            SetInfo[TSConfiguration] = ''
                            for i in range(SiganlCount):
                                SetInfo[TSConfiguration] += f'[{VarTable[sheet.cell(idx + i,SIGNALTYPE).value.upper()]}]' + sheet.cell(idx + i,SIGNALNAME).value +','+ str(sheet.cell(idx + i,SIGNALMINVALUE).value)
                                if i<SiganlCount - 1:
                                    SetInfo[TSConfiguration] += ';'
                            main_sheet.cell(EPStart_Row,EPStart_Col).value = ACTIONLIST[SET]
                            
                            defName =  main_sheet.cell(EPStart_Row,EPStart_Col).coordinate
                            EPStart_Row += 1
                            # main_sheet.cell(EPStart_Row,EPStart_Col).CONDITION = condtion
                            main_sheet.cell(DefStart_Row,def_col+EP2Def).value = defName
                            main_sheet.cell(DefStart_Row,def_col+EP2Name).value = SetInfo[TSstepname]
                            main_sheet.cell(DefStart_Row,def_col+EP2Comment).value = SetInfo[TScomment]
                            main_sheet.cell(DefStart_Row,def_col+EP2Conf).value = SetInfo[TSConfiguration]
                            DefStart_Row+=1
                        elif actionName.lower() == GET and condtion != None:
                            GetInfo = {}
                            GetInfo[TSstepname] = sheet.cell(idx,STEPNAME).value
                            GetInfo[TScomment] = sheet.cell(idx,COMMENT).value
                            SiganlCount = int(sheet.cell(idx,SIGNALCOUNT).value)
                            GetInfo[TSConfiguration] = ''
                            GetTimeOut = sheet.cell(idx,TIMEOUT).value
                            if GetTimeOut != None:
                                GetInfo[TSConfiguration] += str(GetTimeOut) + ";"
                            else:
                                GetInfo[TSConfiguration] += ";"
                            for i in range(SiganlCount):
                                GetInfo[TSConfiguration] += f'[{VarTable[sheet.cell(idx + i,SIGNALTYPE).value.upper()]}]' + sheet.cell(idx + i,SIGNALNAME).value +','+ str(sheet.cell(idx + i,SIGNALMINVALUE).value)+','+ str(sheet.cell(idx + i,SIGNALMAXVALUE).value)+','+ sheet.cell(idx + i,CONDITION).value 
                                if i < SiganlCount - 1:
                                    GetInfo[TSConfiguration] += ";"
                            main_sheet.cell(EPStart_Row,EPStart_Col).value = ACTIONLIST[GET]
                            defName =  main_sheet.cell(EPStart_Row,EPStart_Col).coordinate
                            main_sheet.cell(DefStart_Row,def_col+EP2Def).value = defName
                            main_sheet.cell(DefStart_Row,def_col+EP2Name).value = GetInfo[TSstepname]
                            main_sheet.cell(DefStart_Row,def_col+EP2Comment).value = GetInfo[TScomment]
                            main_sheet.cell(DefStart_Row,def_col+EP2Conf).value = GetInfo[TSConfiguration]
                            DefStart_Row+=1
                            CONTINUEValue = sheet.cell(idx,CONTINUEVALUE).value
                            if CONTINUEValue != None and ISCONTINUE[CONTINUEValue] == "1":
                                main_sheet.cell(EPStart_Row,EPStart_Col + 1).value = NextConnect
                                main_sheet.cell(EPStart_Row,EPStart_Col + 2).value = ACTIONLIST[NOP]
                                defName = main_sheet.cell(EPStart_Row,EPStart_Col + 2).coordinate
                                main_sheet.cell(DefStart_Row,def_col+EP2Def).value = defName
                                main_sheet.cell(DefStart_Row,def_col+EP2Name).value = self.NOP[TSstepname]
                                main_sheet.cell(DefStart_Row,def_col+EP2Comment).value = self.NOP[TScomment]
                                main_sheet.cell(DefStart_Row,def_col+EP2Conf).value = self.NOP[TSConfiguration]
                                DefStart_Row += 1

                                main_sheet.cell(EPStart_Row,EPStart_Col + 3).value = NextConnect
                                main_sheet.cell(EPStart_Row,EPStart_Col + 4).value = ACTIONLIST[JMP]
                                defName = main_sheet.cell(EPStart_Row,EPStart_Col + 4).coordinate
                                main_sheet.cell(DefStart_Row,def_col+EP2Def).value = defName
                                main_sheet.cell(DefStart_Row,def_col+EP2Name).value = self.JMP[TSstepname]
                                main_sheet.cell(DefStart_Row,def_col+EP2Comment).value = self.JMP[TScomment]
                                main_sheet.cell(DefStart_Row,def_col+EP2Conf).value = self.JMP[TSConfiguration] + str(self.lblIdx)
                                EPStart_Row += 1
                                DefStart_Row += 1
                                main_sheet.cell(EPStart_Row,EPStart_Col).value = ACTIONLIST[FROM]
                                defName = main_sheet.cell(EPStart_Row,EPStart_Col).coordinate
                                main_sheet.cell(DefStart_Row,def_col+EP2Def).value = defName
                                main_sheet.cell(DefStart_Row,def_col+EP2Name).value = self.FROM[TSstepname]
                                main_sheet.cell(DefStart_Row,def_col+EP2Comment).value = self.FROM[TScomment]
                                main_sheet.cell(DefStart_Row,def_col+EP2Conf).value = self.FROM[TSConfiguration] + str(self.lblIdx)
                                EPStart_Row += 1
                                DefStart_Row += 1
                                self.lblIdx += 1

                            
                            else:
                                main_sheet.cell(EPStart_Row,EPStart_Col + 1).value = NextConnect
                                main_sheet.cell(EPStart_Row,EPStart_Col + 2).value = ACTIONLIST[NOP]
                                defName = main_sheet.cell(EPStart_Row,EPStart_Col + 2).coordinate
                                main_sheet.cell(DefStart_Row,def_col+EP2Def).value = defName
                                main_sheet.cell(DefStart_Row,def_col+EP2Name).value = self.NOP[TSstepname]
                                main_sheet.cell(DefStart_Row,def_col+EP2Comment).value = self.NOP[TScomment]
                                main_sheet.cell(DefStart_Row,def_col+EP2Conf).value = self.NOP[TSConfiguration]
                                EPStart_Row += 1
                                DefStart_Row += 1
                            
                        elif actionName.lower() == API and condtion != None:
                            APIInfo = {}
                            APIInfo[TSstepname] = sheet.cell(idx,STEPNAME).value
                            APIInfo[TScomment] = sheet.cell(idx,COMMENT).value
                            funcType = sheet.cell(idx,FUNCTIONTYPE).value
                            if funcType not in FunctionType:
                                del APIInfo
                                continue
                            APIInfo[TSConfiguration] = sheet.cell(idx,FUNCTIONNAME).value + ";" + FunctionType[funcType] + ";0;"
                            returnvarType = sheet.cell(idx,RETURNTYPE).value.upper()
                            if returnvarType not in VarTable:
                                APIInfo[TSConfiguration] += ";"
                            else:
                                returnType = VarTable[returnvarType]
                                if returnType == '':
                                    APIInfo[TSConfiguration] += ";"
                                else:
                                    returnName = sheet.cell(idx,RETURNNAME).value
                                    APIInfo[TSConfiguration] += f"[{returnType}]{returnName};"
                            ArgCount = int(sheet.cell(idx,ARGUMENTCOUNT).value)
                            Argcow = ARGUMENT1VALUE
                            for i in range(ArgCount):    
                                if i < ArgCount-1:
                                    APIInfo[TSConfiguration] += f"Arg{i+1}," +str(sheet.cell(idx,Argcow).value) + ';'
                                else:
                                    APIInfo[TSConfiguration] += f"Arg{i+1}," +str(sheet.cell(idx,Argcow).value)
                                Argcow += ADDNUMBER
                            main_sheet.cell(EPStart_Row,EPStart_Col).value = ACTIONLIST[API]
                            
                            defName =  main_sheet.cell(EPStart_Row,EPStart_Col).coordinate
                            EPStart_Row += 1
                            main_sheet.cell(DefStart_Row,def_col+EP2Def).value = defName
                            main_sheet.cell(DefStart_Row,def_col+EP2Name).value = APIInfo[TSstepname]
                            main_sheet.cell(DefStart_Row,def_col+EP2Comment).value = APIInfo[TScomment]
                            main_sheet.cell(DefStart_Row,def_col+EP2Conf).value = APIInfo[TSConfiguration]
                            DefStart_Row+=1
                        elif actionName.lower() == EXP and condtion != None:
                            EXPInfo = {}
                            EXPInfo[TSstepname] = sheet.cell(idx,STEPNAME).value
                            EXPInfo[TScomment] = sheet.cell(idx,COMMENT).value
                            ExpVarCount = int(sheet.cell(idx,EXPRESSIONVARCOUNT).value)
                            EXPInfo[TSConfiguration] = f'{ExpVarCount};' + sheet.cell(idx,EXPRESSIONFUNC).value +";"
                            varType = EXPRESSIONVARTYPE
                            for i in range(ExpVarCount + 1):
                                yType = sheet.cell(idx,varType).value.upper()
                                if (yType in VarTable) and VarTable[yType]!='' :
                                    EXPInfo[TSConfiguration]+= f'[{VarTable[yType]}]'+ str(sheet.cell(idx,varType+TYPEADDVAR).value) 
                                else:
                                    EXPInfo[TSConfiguration]+= str(sheet.cell(idx,varType+TYPEADDVAR).value) 
                                if i < ExpVarCount:
                                    EXPInfo[TSConfiguration]+=";"
                                varType += ADDNUMBER
                            main_sheet.cell(EPStart_Row,EPStart_Col).value = ACTIONLIST[EXP]
                            defName =  main_sheet.cell(EPStart_Row,EPStart_Col).coordinate
                            EPStart_Row += 1
                            main_sheet.cell(DefStart_Row,def_col+EP2Def).value = defName
                            main_sheet.cell(DefStart_Row,def_col+EP2Name).value = EXPInfo[TSstepname]
                            main_sheet.cell(DefStart_Row,def_col+EP2Comment).value = EXPInfo[TScomment]
                            main_sheet.cell(DefStart_Row,def_col+EP2Conf).value = EXPInfo[TSConfiguration]
                            DefStart_Row+=1
                        elif actionName.lower() == PROGRAM and condtion != None:
                            Program = {}
                            Program[TSstepname] = sheet.cell(idx,STEPNAME).value
                            Program[TScomment] = sheet.cell(idx,COMMENT).value
                            Program[TSConfiguration] = ''
                            ProCount = sheet.cell(idx,PROREPEATCOUNT).value
                            if ProCount != None:
                                Program[TSConfiguration] += str(ProCount)+';'
                            else:
                                Program[TSConfiguration] += '1;'
                            ProSelect = sheet.cell(idx,PROSELECTED).value
                            if ProSelect in SelectList:
                                Program[TSConfiguration] += SelectList[ProSelect]+';'
                            else:
                                Program[TSConfiguration] += '1;'
                            Program[TSConfiguration] += Program[TSstepname] + ";"+Program[TScomment]
                            main_sheet.cell(DefStart_Row,def_col+EP2Def).value = PROGRAM
                            main_sheet.cell(DefStart_Row,def_col+EP2Name).value = Program[TSstepname]
                            main_sheet.cell(DefStart_Row,def_col+EP2Comment).value = Program[TScomment]
                            main_sheet.cell(DefStart_Row,def_col+EP2Conf).value = Program[TSConfiguration]
                            DefStart_Row+=1
        workbook.save(self.outputFileName)
        return ret
        
if __name__ == "__main__":
    import sys
    if len(sys.argv)<3:
        print("input arg count error")
        
    start_time = time.perf_counter()
    a = ExcelConverMod2(sys.argv[1],sys.argv[2])
    print("用时：",time.perf_counter() - start_time)
    # a = ExcelConverMod2(r"D:\IDE\tsexcelconverter\src\TG1_TC1.xlsx","2.xlsx")
