# import os
import openpyxl
import json
import io
import sys

def save2json(jd, json_file_name):
    file = io.open(json_file_name, 'w', encoding='utf-8')
    # 把对象转化为json对象
    # indent: 参数根据数据格式缩进显示，读起来更加清晰
    # ensure_ascii = True：默认输出ASCII码，如果把这个该成False, 就可以输出中文。
    txt = json.dumps(jd, indent=2, ensure_ascii=False)
    file.write(txt)
    file.close()


def main(excel_file, json_file_name):
    # 加载工作薄
    book = openpyxl.load_workbook(excel_file)
    # 获取sheet页
    sheet = book["Sheet1"]
    # 行数
    max_row = sheet.max_row
    # 列数
    max_column = sheet.max_column
    print("max_row: %d, max_column: %d" % (max_row, max_column))
    # 结果，数组存储
    result = []
    json_data = []
    

    starRow = 2#头信息纵坐标
    starcolumb = 2 #第一个有效的横坐标
    actTagcolnum = 2 #actTag横坐标
    defaultcolnum = 3
    actValcolnum = 4
    modecolnum = 5

    conditionstartnum = 0 #条件起始横坐标
    conditionnum = 0 #条件数量
    conditionTagOffser = 0 
    conditionOffser = 1
    valueOffser = 2

    
    for column in range(max_column):
        if column == 0:
            continue
        if conditionnum > 0:
            if sheet.cell(starRow, column).value !="conditionTag" and sheet.cell(starRow, column).value !="condition" and sheet.cell(starRow, column).value !="value":
                break
        if sheet.cell(starRow, column).value == "conditionTag":
            if  conditionstartnum == 0:
                conditionstartnum = column
            conditionnum += 1
            
    # print(conditionstartnum)
    # print(conditionnum)
    #all_len = conditionstartnum + conditionnum * 3
    # print(all_len)
    # 遍历每一行
    lastactTag = "null"
    actTag = "null"
    first_index = -1#第一层数组索引
    second_index = 0
    thired_index = 0
    lastactValue = "null"
    for row in range(max_row+1):
        if row <= starcolumb:
            continue
        if sheet.cell(row, 1).value == "end":#纵向结束边界
            break
        actTag = sheet.cell(row, actTagcolnum).value
        print("actTag",actTag)
        if actTag == None or lastactTag == actTag:
            actValue = sheet.cell(row, actValcolnum).value
            print("actValue",actValue)
            if actValue == lastactValue:
                print("actValue same ",second_index)
                thired_index += 1
                json_data[first_index]["conditionInfo"][second_index]["conditionList"].append({"mode":sheet.cell(row, modecolnum).value,"and_list":[]}) 
                for num in range(conditionnum):
                    conditionTag = sheet.cell(row, conditionstartnum+num*3).value
                    condition = sheet.cell(row, conditionstartnum+num*3+1).value
                    value = sheet.cell(row, conditionstartnum+num*3+2).value
                    if conditionTag != None and condition != None and value != None:
                        json_data[first_index]["conditionInfo"][second_index]["conditionList"][thired_index]["and_list"].append({"name": conditionTag,"condition": condition,"value": value})   
            else:
                second_index += 1
                thired_index = 0
                print("second_index ",second_index)
                json_data[first_index]["conditionInfo"].append({"actVal":actValue,"conditionList":[]})
                json_data[first_index]["conditionInfo"][second_index]["conditionList"].append({"mode":sheet.cell(row, modecolnum).value,"and_list":[]})
                for num in range(conditionnum):
                    conditionTag = sheet.cell(row, conditionstartnum+num*3).value
                    condition = sheet.cell(row, conditionstartnum+num*3+1).value
                    value = sheet.cell(row, conditionstartnum+num*3+2).value
                    if conditionTag != None and condition != None and value != None:
                        json_data[first_index]["conditionInfo"][second_index]["conditionList"][thired_index]["and_list"].append({"name": conditionTag,"condition": condition,"value": value})   
                
            lastactValue = actValue
        else:
            print(row)
            first_index += 1
            second_index = 0
            thired_index = 0
            lastactTag = actTag
            if sheet.cell(row, defaultcolnum).value == None:
                json_data.append({"name":actTag,"reset":0,"resetValue":0,"conditionInfo":[]})
            else:
                json_data.append({"name":actTag,"reset":1,"resetValue":sheet.cell(row, defaultcolnum).value,"conditionInfo":[]}) 
            actValue = sheet.cell(row, actValcolnum).value
            lastactValue = actValue
            json_data[first_index]["conditionInfo"].append({"actVal":actValue,"conditionList":[]})
            json_data[first_index]["conditionInfo"][second_index]["conditionList"].append({"mode":sheet.cell(row, modecolnum).value,"and_list":[]})

            for num in range(conditionnum):
                conditionTag = sheet.cell(row, conditionstartnum+num*3).value
                condition = sheet.cell(row, conditionstartnum+num*3+1).value
                value = sheet.cell(row, conditionstartnum+num*3+2).value
                if conditionTag != None and condition != None and value != None:
                    json_data[first_index]["conditionInfo"][second_index]["conditionList"][thired_index]["and_list"].append({"name": conditionTag,"condition": condition,"value": value})   

                
            
    print(json_data)
    book.close()
    # 将json保存为文件
    save2json(json_data, json_file_name)


if '__main__' == __name__:
    main(sys.argv[1],'automatic_control.json')