const http = require('../../http.js');
const config = require('../../config.js');
var functionList = [];
function realData(value1) {
    //汇报数据
    var json = {};
    json['command'] = 0;
    json['response'] = 0;
    json['report'] = 0;
    console.log(value1);
    var value = dataBody(value1);
    if (value.length < 2) {
        return;
    }
    if (value[0] === 129 || value[0] === 130 || value[0] === 131) {
        //租电 换电 还电 响应数据
        json = exChangeHireReturnReponse(value, json);
        //换电 租电 还电汇报数据
        json = exChangeHireReturnReport(value, json);
    }
    if (value[0] === 132) {
        if (value[1] === 1) {
            //响应数据
            json['msg'] = '取消未确认成功';
            json['state'] = value[2];
        }
    }
    //电柜信息
    json = cabinetInfo(value, value1, json);
    return json;
}

//换电 租电 还电汇报数据
function exChangeHireReturnReport(value, json) {
    if (value[0] === 129) {
        if (value[1] === 2) {
            json['msg'] = reportMsgData(value);
            json['report'] = 1;
            //汇报数据
            var toIndex = 4;
            json['state'] = value[2];
            json['emptyNo'] = value[3];
            json['emptyBatteryNo'] = asciiListToString(toIndex, value);
            json['emptyBatterySOC'] = value[toIndex + value[toIndex] + 1];
            toIndex = toIndex + value[toIndex] + 1 + 1;
            json['fullNo'] = value[toIndex];
            toIndex = toIndex + 1;
            json['fullBatteryNo'] = asciiListToString(toIndex, value);
            json['fullBatterySOC'] = value[toIndex + value[toIndex] + 1];
            toIndex = toIndex + value[toIndex] + 1 + 1;
            json['orderNo'] = asciiListToString(toIndex, value);
            toIndex = toIndex + value[toIndex] + 1;
            json['serialLen'] = value[toIndex];
            json['serialNo'] = asciiListToString(toIndex, value);
        }
    } else {
        if (value[1] === 2) {
            json['msg'] = reportMsgData(value);
            json['report'] = 1;
            var toIndex = 4;
            json['state'] = value[2];
            json['boxNo'] = value[3];
            json['batteryNo'] = asciiListToString(toIndex, value);
            json['batterySOC'] = value[toIndex + value[toIndex] + 1];
            toIndex = toIndex + value[toIndex] + 1 + 1;
            json['orderNo'] = asciiListToString(toIndex, value);
            toIndex = toIndex + value[toIndex] + 1;
            json['serialLen'] = value[toIndex];
            json['serialNo'] = asciiListToString(toIndex, value);
        }
    }
    return json;
}

//换电 租电 还电响应数据
function exChangeHireReturnReponse(value, json) {
    if (value[1] === 1) {
        //响应数据
        json['state'] = value[2];
        json['response'] = 1;
        json['msg'] = reponseMsgData(value);
        json['command'] = value[0];
        if (value[0] === 129) {
            json['batteryNo'] = asciiListToString(3, value);
            var toIndex = 3 + value[3] + 1;
            json['serialLen'] = value[toIndex];
            json['serialNo'] = asciiListToString(toIndex, value);
        } else {
            json['serialLen'] = value[3];
            json['serialNo'] = asciiListToString(3, value);
        }
    }
    return json;
}

//换电柜信息
function cabinetInfo(value, value1, json) {
    if (value[0] === 134) {
        if (value[1] === 1) {
            functionList = [];
        }
        json['state'] = 10001; //信息传输中
        json['command'] = value[0];
        if (value.length > 3) {
            if (value[1] === 4) {
                if (functionList.length > 0 && functionList[0].length > 2 && functionList[0][2] === 134 && functionList[0][3] === 1) {
                    json['commandList'] = functionList;
                    json['state'] = 10000; //信息传输结束
                    functionList = [];
                }
            } else {
                functionList.push(value1);
            }
        }
    }
    return json;
}
function asciiListToString(index, value) {
    var len = value[index];
    index = index + 1;
    var str = '';
    if (len != 0) {
        for (var i = 0; len > i; i++) {
            str += String.fromCharCode(value[index + i]);
        }
    } else {
        str = '0';
    }
    return str;
}
function dataBody(hexList) {
    if (hexList.length > 4) {
        if (hexList[0] === 122 && hexList[hexList.length - 1] === 120) {
            return hexList.slice(2, -2);
        }
    } else {
        return hexList;
    }
}

//响应数据状态
function reponseMsgData(value) {
    console.log(value);
    var msg = '';
    if (value[0] === 129) {
        //换电
        if (value[2] === 1) {
            msg = '成功';
        }
        if (value[2] === 2) {
            msg = '密钥验证失败';
        }
        if (value[2] === 3) {
            msg = '前一个流程未结束';
        }
        if (value[2] === 4) {
            msg = '空仓门不存在';
        }
        if (value[2] === 5) {
            msg = '满仓门不存在';
        }
        if (value[2] === 6) {
            msg = '柜子禁用';
        }
        if (value[2] === 7) {
            msg = '上次操作未确认';
        }
    }
    if (value[0] === 130) {
        //租电
        if (value[2] === 1) {
            msg = '成功';
        }
        if (value[2] === 2) {
            msg = '密钥验证失败';
        }
        if (value[2] === 3) {
            msg = '前一个流程未结束';
        }
        if (value[2] === 4) {
            msg = '柜子禁用';
        }
        if (value[2] === 5) {
            msg = '租电仓门号不存在';
        }
        if (value[2] === 6) {
            msg = '上次操作未确认';
        }
    }
    if (value[0] === 131) {
        //还电
        if (value[2] === 1) {
            msg = '成功';
        }
        if (value[2] === 2) {
            msg = '密钥验证失败';
        }
        if (value[2] === 3) {
            msg = '前一个流程未结束';
        }
        if (value[2] === 4) {
            msg = '指定的还电仓门号不存在';
        }
        if (value[2] === 5) {
            msg = '柜子禁用';
        }
        if (value[2] === 6) {
            msg = '上次操作未确认';
        }
    }
    return msg;
}

//汇报数据状态
function reportMsgData(value) {
    var msg = '';
    if (value[0] === 129) {
        //换电
        if (value[2] === 1) {
            msg = '成功';
        }
        if (value[2] === 20) {
            msg = '空仓门开启失败，终止流程';
        }
        if (value[2] === 21) {
            msg = '用户没有放入电池，终止流程';
        }
        if (value[2] === 22) {
            msg = '用户与放入的电池不匹配，终止流程';
        }
        if (value[2] === 23) {
            msg = '无法识别电池，终止流程';
        }
        if (value[2] === 24) {
            msg = '满电仓门开启失败，终止流程';
        }
        if (value[2] === 25) {
            msg = '用户取出电池,未关仓门，流程正常结束';
        }
        if (value[2] === 26) {
            msg = '换电成功';
        }
        if (value[2] === 27) {
            msg = '用户关闭空仓门超时,终止流程';
        }
        if (value[2] === 28) {
            msg = '用户长时间未取电池，终止流程';
        }
        if (value[2] === 29) {
            msg = '用户关闭仓门，未取电池，终止流程';
        }
    }
    if (value[0] === 130) {
        //租电
        if (value[2] === 1) {
            msg = '成功';
        }
        if (value[2] === 30) {
            msg = '租电仓门开启失败，终止租电流程';
        }
        if (value[2] === 31) {
            msg = '用户关闭仓门，未取租用电池，终止流程；';
        }
        if (value[2] === 32) {
            msg = '租电成功';
        }
        if (value[2] === 33) {
            msg = '用户未关闭仓门，未取走租用电池，超时终止流程';
        }
        if (value[2] === 34) {
            msg = '用户未关闭仓门，取走租用电池，超时终止流';
        }
    }
    if (value[0] === 131) {
        //还电
        if (value[2] === 1) {
            msg = '成功';
        }
        if (value[2] === 40) {
            msg = '还电仓门开启失败，终止还电流程';
        }
        if (value[2] === 41) {
            msg = '归还电池编码不匹配，终止还电流程';
        }
        if (value[2] === 42) {
            msg = '用户关闭还电仓门超时，终止还电流程';
        }
        if (value[2] === 43) {
            msg = '还电成功';
        }
    }
    return msg;
}
function reportCabintHire(dev_id, sn, json) {
    const pData = {
        battery_ca: json.batteryNo,
        battery_sn: sn,
        box_sn: json.boxNo,
        dev_id: dev_id,
        order_sn: json.orderNo,
        status: json.state
    };
    http.postApi(config.API_CABINET_BLUETOOTH_HIRE, pData, function (response) {
        if (response.data.code === 200) {
        } else {
            simpleToast(response.data.msg);
        }
    });
}
function reportCabintExchange(dev_id, json) {
    const pData = {
        battery_sn: json.batteryNo,
        dev_id: dev_id,
        order_sn: json.orderNo,
        status: json.state,
        rtn_door_id: json.emptyNo,
        brw_door_id: json.fullNo,
        rtn_battery_ca: json.emptyBatteryNo,
        brw_battery_ca: json.fullBatteryNo
    };
    http.postApi(config.API_CABINET_BLUETOOTH_EXCHANGE_SUCCESS, pData, function (response) {
        if (response.data.code === 200) {
        } else {
            simpleToast(response.data.msg);
        }
    });
}
function reportCabintReturn(dev_id, sn, json) {
    const pData = {
        battery_sn: sn,
        rtn_battery_ca: json.batteryNo,
        dev_id: dev_id,
        order_sn: json.orderNo,
        box_sn: json.boxNo,
        status: json.state
    };
    http.postApi(config.API_CABINET_BLUETOOTH_RETURN_SUCCESS, pData, function (response) {
        if (response.data.code === 200) {
        } else {
            simpleToast(response.data.msg);
        }
    });
}
module.exports = {
    realData: realData,
    // reportCabintInfo: reportCabintInfo,
    reportCabintExchange: reportCabintExchange,
    reportCabintHire: reportCabintHire,
    reportCabintReturn: reportCabintReturn
};
