function addzero(num) {
    return num < 10 ? '0' + num : num;
}

/**
 * 取得異常資料 by baja
 * @param {any} startDate_millisecond
 * @param {any} endDate_millisecond
 * @param {any} isRecover
 * @param {any} isAck
 * @param {any} alarmClass
 * @param {any} callback
 */
// function getAlarmByBaja(startDate_millisecond, endDate_millisecond, isRecover, isAck, alarmClass, callback) {
//     let _sourceTmp;
//     var _result = "";
//     var _ss = "";
//     var _bfName = "";
//     var _sourceName = "";
//     var _index = 0;
//     var _recoverState = isRecover ? "!= null" : "= null";
//     var _ackState = isAck ? "= 1" : "!= 1";

//     require(['baja!'], function (baja) {
//         baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where alarmClass = '" + alarmClass + "' and timestamp.millis > " + startDate_millisecond + " and timestamp.millis < " + endDate_millisecond + " and normalTime " + _recoverState + " order by timestamp asc").get()
//             .then(function (table) {
//                 return table.cursor({
//                     each: function (record) {
//                         _sourceTmp = (record.get('alarmData').get('sourceName')).toString().split('_');
//                         _bfName = _sourceTmp[1] + "-" + _sourceTmp[4];
//                         _sourceName = _sourceTmp[7] + "-" + _sourceTmp[8];
//                         _ss += ', "' + _index + '": {"buildingFloorName_zh":"' + _bfName + '", "uuid":"' + record.get('uuid') + '", "timestamp":"' + record.get('timestamp') + '", "alarmClass":"' + record.get('alarmClass') + '", "sourceName_zh":"' + _sourceName + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
//                         _index++;
//                     },
//                     after: function () {
//                         _result += '{' + '"count": ' + _index;
//                         _result += _ss;
//                         _result += '}';
//                         if (typeof callback === 'function') {
//                             callback(_result);
//                         }
//                     }
//                 });
//             });
//     });
// }
function getAlarmByBaja(startDate_millisecond, endDate_millisecond, isRecover, isAck, alarmClass, callback) {
    let _sourceTmp;
    var _result = "";
    var _ss = "";
    var _bfName = "";
    var _sourceName = "";
    var _index = 0;
    var _recoverState = isRecover ? "!= null" : "= null"
    var _ackState = isAck ? "= 1" : "!= 1";

    require(['baja!'], function (baja) {
        baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where alarmClass = '" + alarmClass + "' and timestamp.millis > " + startDate_millisecond + " and timestamp.millis < " + endDate_millisecond + " and normalTime " + _recoverState + " order by timestamp asc").get()
            .then(function (table) {
                return table.cursor({
                    each: function (record) {
                        _sourceTmp = (record.get('alarmData').get('sourceName')).toString().split('_');
                        _bfName = _sourceTmp[1] + "-" + _sourceTmp[4];
                        _sourceName = _sourceTmp[7] + "-" + _sourceTmp[8];

                        if (_index == 0)
                            _ss += '{"buildingFloorName_zh":"' + _bfName + '", "uuid":"' + record.get('uuid') + '", "timestamp":"' + record.get('timestamp') + '", "alarmClass":"' + record.get('alarmClass') + '", "sourceName_zh":"' + _sourceName + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
                        else
                            _ss += ',{"buildingFloorName_zh":"' + _bfName + '", "uuid":"' + record.get('uuid') + '", "timestamp":"' + record.get('timestamp') + '", "alarmClass":"' + record.get('alarmClass') + '", "sourceName_zh":"' + _sourceName + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
                        _index++;
                    },
                    after: function () {
                        _result += '{' + '"count": ' + _index + ', "data":[';
                        _result += _ss;
                        _result += ']}';
                        if (typeof callback === 'function') {
                            callback(_result);
                        }
                    },
                    limit: -1,
                    offset: 0
                });
            });
    });
}

/**
 * 取得單一設備最新10筆異常資料 by baja
 * @param {any} devicePath
 * @param {any} callback
 */
// function getOneDeviceAlarmTop10ByBaja(devicePath, callback) {
//     var _result = "";
//     var _ss = "";
//     var _index = 0;
//     //{ "count":2,"data": [{ "time": "2022/11/14 15:00:00", "errId": "0001", "ackCheck": "未確認", "errReason": "燈泡故障" }, { "time": "2022/11/14 15:00:00", "errId": "0002", "ackCheck": "未確認", "errReason": "燈泡故障" }]}
//     require(['baja!'], function (baja) {
//         baja.Ord.make("local:|foxs:|alarm:|bql:select top 10 timestamp, ackState, alarmData, alarmData.sourceName, sourceState, uuid, alarmData.msgText, normalTime where alarmData.sourceName like '%" + devicePath + "%' order by timestamp desc").get()
//             .then(function (table) {
//                 return table.cursor({
//                     each: function (record) {
//                         if (_index == 0)
//                             _ss += '{"uuid":"' + record.get('uuid') + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "timestamp":"' + record.get('timestamp') + '"}';
//                         else
//                             _ss += ',{"uuid":"' + record.get('uuid') + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "timestamp":"' + record.get('timestamp') + '"}';
//                         _index++;
//                     },
//                     after: function () {
//                         _result += '{' + '"count": ' + _index +', "data":[';

//                         _result += _ss+']';
//                         _result += '}';
//                         if (typeof callback === 'function') {
//                             callback(_result);
//                         }
//                     }
//                 });
//             });
//     });
// }
function getOneDeviceAlarmTop10ByBaja(devicePath, callback) {
    var _result = "";
    var _ss = "";
    var _occurrenceTime = "";
    var _normalTime = "";
    var _index = 0;
    //{ "count":2,"data": [{ "time": "2022/11/14 15:00:00", "errId": "0001", "ackCheck": "未確認", "errReason": "燈泡故障" }, { "time": "2022/11/14 15:00:00", "errId": "0002", "ackCheck": "未確認", "errReason": "燈泡故障" }]}
    require(['baja!'], function (baja) {
        baja.Ord.make("local:|foxs:|alarm:|bql:select top 10 timestamp, ackState, alarmData, alarmData.sourceName, sourceState, uuid, alarmData.msgText, normalTime where alarmData.sourceName like '%" + devicePath + "%' order by timestamp desc").get()
            .then(function (table) {
                return table.cursor({
                    each: function (record) {
                        _occurrenceTime = "";
                        _normalTime = "";
                        var _resultUuid = record.get('uuid').toString().split("-");//43dc7846-bd96-4be2-ab35-f11aec729c60

                        var _timestampTemp = new Date(record.get('timestamp').toString());
                        _occurrenceTime += _timestampTemp.getFullYear().toString() + "-" + addzero(_timestampTemp.getMonth() + 1).toString() + "-" + addzero(_timestampTemp.getDate()).toString() + " " + addzero(_timestampTemp.getHours()).toString() + ":" + addzero(_timestampTemp.getMinutes()).toString() + ":" + addzero(_timestampTemp.getSeconds()).toString();

                        //var _occurrenceTime = _timestamp.format("yyyy-MM-dd hh:mm:ss");//.toLocaleString();
                        var _normaltime = new Date(record.get('normalTime').toString());
                        _normalTime += _normaltime.getFullYear().toString() + "-" + addzero(_normaltime.getMonth() + 1).toString() + "-" + addzero(_normaltime.getDate()).toString() + " " + addzero(_normaltime.getHours()).toString() + ":" + addzero(_normaltime.getMinutes()).toString() + ":" + addzero(_normaltime.getSeconds()).toString();

                        var _msgText = record.get('alarmData').get('msgText');// == 1 ? _occurrenceTime : "未確認";
                        var _ackText = record.get('ackState') == 1 ? _occurrenceTime : "未確認";

                        if (_index == 0)
                            _ss += '{"uuid":"' + _resultUuid[0] + '", "msgText":"' + _msgText + '", "ackState":"' + _ackText + '", "timestamp":"' + _occurrenceTime + '", "normalTime":"' + _normalTime + '"}';
                        else
                            _ss += ',{"uuid":"' + _resultUuid[0] + '", "msgText":"' + _msgText + '", "ackState":"' + _ackText + '", "timestamp":"' + _occurrenceTime + '", "normalTime":"' + _normalTime + '"}';
                        _index++;
                    },
                    after: function () {
                        _result += '{' + '"count": ' + _index + ', "data":[';
                        _result += _ss + ']';
                        _result += '}';
                        if (typeof callback === 'function') {
                            callback(_result);
                        }
                    },
                    limit: -1,
                    offset: 0
                });
            });
    });
}

/**
 * 在單一系統下,取得各個設備的異常狀態
 * @param {any} systemPath
 * @param {any} callback
 */
// function getOneSystemAlarmStateByBaja(systemPath, callback) {
//     var _result = "";
//     var _ss = "";
//     var _index = 0;

//     require(['baja!'], function (baja) {
//         baja.Ord.make("local:|foxs:|alarm:|bql:select alarmData, alarmData.sourceName, sourceState, uuid where alarmData.sourceName like '%" + systemPath + "%' order by timestamp desc").get()
//             .then(function (table) {
//                 return table.cursor({
//                     each: function (record) {
//                         _ss += ', "' + _index + '": {"uuid":"' + record.get('uuid') + '", "sourceName":"' + record.get('alarmData').get('sourceName') + '", "sourceState":"' + record.get('sourceState') + '"}';
//                         _index++;
//                     },
//                     after: function () {
//                         _result += '{' + '"count": ' + _index;
//                         _result += _ss;
//                         _result += '}';
//                         if (typeof callback === 'function') {
//                             callback(_result);
//                         }
//                     }
//                 });
//             });
//     });
// }
function getOneSystemAlarmStateByBaja(systemPath, callback) {
    var _result = "";
    var _ss = "";
    var _index = 0;
    
    require(['baja!'], function (baja) {
        baja.Ord.make("local:|foxs:|alarm:|bql:select alarmData, alarmData.sourceName, sourceState, uuid where alarmData.sourceName like '%" + systemPath + "%' order by timestamp desc").get()
            .then(function (table) {
                return table.cursor({
                    each: function (record) {
                        if (_index == 0)
                            _ss += '{"uuid":"' + record.get('uuid') + '", "sourceName":"' + record.get('alarmData').get('sourceName') + '", "sourceState":"' + record.get('sourceState') + '"}';
                        else
                            _ss += ',{"uuid":"' + record.get('uuid') + '", "sourceName":"' + record.get('alarmData').get('sourceName') + '", "sourceState":"' + record.get('sourceState') + '"}';
                        _index++;
                    },
                    after: function () {
                        _result += '{' + '"count": ' + _index + ', "data":[';
                        _result += _ss;
                        _result += ']}';
                        if (typeof callback === 'function') {
                            callback(_result);
                        }
                    },
                    limit: -1,
                    offset: 0
                });
            });
    });
}

/**
 * 在單一系統下,取得各個系統的狀態 異常與否
 * @param {any} systemPath
 * @param {any} callback
 */
function getOneSystemStateByBaja(systemPath, callback) {
    var _result = "";
    var _ss = "";
    var _index = 0;

    require(['baja!'], function (baja) {
        baja.Ord.make("local:|foxs:|alarm:|bql:select top 1 alarmData, alarmData.sourceName, sourceState where alarmData.sourceName like '%" + systemPath + "%' order by timestamp desc").get()
            .then(function (table) {
                return table.cursor({
                    each: function (record) {
                        //if (_index == 0)
                        //    _ss += '{"sourceState":"' + record.get('sourceState') + '"}';
                        //else
                        //    _ss += '{"sourceState":"' + record.get('sourceState') + '"}';
                        _ss += '{"sourceState":"' + record.get('sourceState') + '"}';
                        _index++;
                    },
                    after: function () {
                        _result += '{' + '"count": ' + _index + ', "data":[';
                        _result += _ss;
                        _result += ']}';
                        if (typeof callback === 'function') {
                            callback(_result);
                        }
                    },
                    limit: -1,
                    offset: 0
                });
            });
    });
}