#include "Json.h"
#include <cJSON.h>

Json::Json(/* args */)
{
}

Json::~Json() {}

// json 数据封装 带数组数据
String Json::StatusDataReport()
{
    cJSON *mainJson = cJSON_CreateObject(); //创建主体对象
    cJSON *message = cJSON_CreateObject();  //创建消息体对象
    cJSON *arrayData = cJSON_CreateArray(); //创建数组对象

    cJSON_AddStringToObject(mainJson, "MessageId", "256");
    cJSON_AddStringToObject(mainJson, "MessageVersion", "24");
    cJSON_AddStringToObject(mainJson, "ClientId", "1");
    cJSON_AddStringToObject(mainJson, "ClientType", "20");
    cJSON_AddStringToObject(mainJson, "Timestamp", __TIME__);
    cJSON_AddStringToObject(message, "Timestamp", "0");

    for (size_t i = 0; i < AISLE; i++)
    {
        cJSON *Data = cJSON_CreateObject(); //创建消息体里面的数据对象
        cJSON_AddItemToArray(arrayData, Data);
        cJSON_AddStringToObject(Data, "Channel", String(i + 1).c_str());
        cJSON_AddStringToObject(Data, "Current", String(Current[i]).c_str());
        cJSON_AddStringToObject(Data, "Voltage", String(Voltage).c_str());
        cJSON_AddStringToObject(Data, "Power", String(Current[i] * Voltage).c_str());
        cJSON_AddStringToObject(Data, "Energy", String(deviceModel[i].Energy).c_str());
    }

    cJSON_AddItemToObject(message, "Datas", arrayData);
    cJSON_AddItemToObject(mainJson, "Message", message);
    char *date = cJSON_Print(mainJson);
    String jsondata(date);
    cJSON_free((void *)date); // 释放cJSON_Print ()分配出来的内存空间
    cJSON_Delete(mainJson);   // 释放cJSON_CreateObject ()分配出来的内存空间
    return jsondata;
}

String Json::PowerHarvesting()
{
    cJSON *mainJson = cJSON_CreateObject();
    cJSON_AddStringToObject(mainJson, "DeviceType", "Electricity");
    cJSON_AddStringToObject(mainJson, "Voltage", String(Voltage).c_str());
    for (size_t i = 0; i < AISLE; i++)
    {
        cJSON_AddStringToObject(mainJson, ("Current" + String(i + 1)).c_str(), String(Current[i]).c_str());
    }
    char *date = cJSON_Print(mainJson);
    String jsondata(date);
    cJSON_free((void *)date); // 释放cJSON_Print ()分配出来的内存空间
    cJSON_Delete(mainJson);   // 释放cJSON_CreateObject ()分配出来的内存空间
    return jsondata;
}

void Json::ParseJson(String str)
{
    cJSON *mainJson = cJSON_Parse(str.c_str());
    if (mainJson != NULL)
    {
        String DeviceType = cJSON_GetObjectItem(mainJson, "DeviceType")->valuestring;
        if (DeviceType == "Electricity") //电力设备
        {
            Voltage = String(cJSON_GetObjectItem(mainJson, "Voltage")->valuestring).toFloat();
            for (size_t i = 0; i < AISLE; i++)
            {
                String ResultValue(cJSON_GetObjectItem(mainJson, ("Current" + String(i + 1)).c_str())->valuestring);
                Current[i] = ResultValue.toFloat();
            }
        }
        else if (DeviceType == "Gas") //燃气设备
        {
        }
        else if (DeviceType == "Water") //用水设备
        {
        }
    }
}

Json myJson;
