apiready = function () {

    app = {
        init: {},
        bind: {},
        initUser: {},
        initDB: {},
        jump: {},   // 跳转
        getMessages: {},
        listenMessage: {},
        unListenMessage: {},
        getPowerRooms: {},
        getPowerRoomsByEmployee: {},// 员工登陆，获取配电室列表
        getAlarmList: {}
    }

    app.init = function () {
        this.bind();
        // 初始化数据库
        this.initDB(this.jump);
    }

    // 事件绑定
    app.bind = function () {
        //应用回到前台之后  获取消息
        api.addEventListener({
            name: 'resume'
        }, function (ret, err) {
            if ($api.getStorage("userId")) {
                app.getMessages();
            }
        });
        // 收到登录成功的消息 初始化客户
        api.addEventListener({
            name: 'logined'
        }, function (ret, err) {
            $api.disabledRequest = false; // 取消禁止调用接口标志
            // edit start 2023/2/27
            if ($api.getStorage("userType") == 2) {
                app.getPowerRoomsByEmployee();
                app.getAlarmList();

                return
            }
            // edit end 2023/2/27
            app.initUser();
        });

        // 收到登录失败的消息 1、清空客户消息 2、取消监听推送 3、重置badge(ios有效)
        api.addEventListener({
            name: 'loginout'
        }, function (ret, err) {
            if (rtAlarmTimer) {
                clearInterval(rtAlarmTimer);
            }

            // add start 2019/4/29 kangzhi
            // 在清除所有的storage信息时，若选择了记住密码，则重新存储账号密码
            var remember = $api.getStorage('remember');
            var account = $api.getStorage('account');
            var password = $api.getStorage('password');
            // add end 2019/4/29 kangzhi

            $api.clearStorage();

            // add start 2019/4/29 kangzhi
            if (remember) {
                $api.setStorage('remember', remember);
                $api.setStorage("account", account);
                $api.setStorage("password", password);
            }
            // add end 2019/4/29 kangzhi

            app.unListenMessage();
            api.setAppIconBadge({
                badge: 0
            });
        });

        api.addEventListener({
            name: 'removeMessage',
        }, function (ret, err) {
            if (ret) {
                var messageId = ret.value.messageId;

                if (messageId) {
                    messageDao.deleteOne(messageId);
                }
            }
        });

        // add by guoyuanyuan 2018/9/25
        // 监听客户改变的消息(项目改变)
        api.addEventListener({
            name: 'projectChanged'
        }, function (ret, err) {
            app.getPowerRooms();
            app.getAlarmList();
        });

        // add s 2023/7/20
        // 员工登陆时，角色切换
        // api.addEventListener({
        //     name: 'roleChanged'
        // }, function (ret, err) {
        //     app.getPowerRooms();
        //     app.getAlarmList();
        // });
    }

    //初始化用户
    app.initUser = function () {
        messageDao.initTable(app.getMessages);
        app.listenMessage();
        app.getPowerRooms();
        app.getAlarmList();
    }

    //初始化数据库
    app.initDB = function (callback) {
        messageDao.initTable(function (ret, err) {

            if (!err) {

                // 创建message表
                userMaxMessageIdDao.initTable(function (ret, err) {
                    messageDao.getMaxIds(function (list) {
                        for (var i = 0; i < list.length; i++) {
                            userMaxMessageIdDao.updateUserMessageId(list[i].user_id, list[i].msg_id, function (ret, err) {

                            });
                        }
                        setTimeout(function () {
                            if (callback) {
                                callback();
                            }
                        }, 100);

                    })
                });
            }
        });

    }

    // 初始化完成之后 跳转
    app.jump = function () {
        //标识已经登陆过，直接跳转到登陆后的首页
        var useId = $api.getStorage('userId');

        if ($api.getStorage("token") && !$api.disabledRequest && useId) {
            app.getAlarmList();
            var edge = api.winWidth * 0.2;
            (edge < 0) && (edge = 60);
            api.openDrawerLayout({
                name: 'index',
                url: 'widget://html/index/index.html',
                leftPane: {
                    edge: edge,
                    name: 'index.leftPanel',
                    url: 'widget://html/index/leftPanel.html'
                },
                reload: true,
                slidBackEnabled: false,
                animation: {
                    type: "fade",
                    duration: 300
                }
            });
        } else {
            //没有登陆的话，跳转到登陆页面
            api.openWin({
                name: 'login',
                url: 'widget://html/user/login.html',
                animation: {
                    type: 'fade'
                }
            });
        }
    }

    //从数据库上获取消息并保存到本地
    app.getMessages = function () {
        messageDao.updateData();
    }

    //监听消息推送
    app.listenMessage = function () {

        var ajpush = api.require('ajpush');

        //如果是android 初始化jpush
        if (api.systemType == "android") {
            ajpush.setAuth({
                auth:true
            },function(ret) {
                if (ret && ret.status){
                    //success
                    console.log(ret.status, 'status')
                    ajpush.init(function (ret) {
                        if (ret && ret.status) {
                            console.log(ret.status, 'ret.status')
                            ajpush.getRegistrationId(function (ret) {
                                var registrationId = ret.id;
                            });
                            listen();
                        }
                    });
                }
            });
        } else {
            listen();
        }

        function listen() {
            var userId = $api.getStorage("userId");
            var alias = 'CUSTOMER_' + userId;
            var tags = ['CUSTOMER', alias];
            var param = {
                alias: alias,
                // tags: tags
            };

            ajpush.resumePush(function (ret) {
                if (ret && ret.status) {
                    var count = 0
                    var bindInterval = setInterval(function () {
                        ajpush.bindAliasAndTags(param, function (ret, err) {
                            count++;
                            ajpush.setListener(function (ret) {
                                messageDao.updateData();
                            });
                            if (ret && ret.statusCode != 6002) {
                                clearInterval(bindInterval)
                            }
                            if (count > 3) {
                                clearInterval(bindInterval)
                            }
                        });
                    }, 5000)
                }
            });

            // ajpush.resumePush(function (ret) {
            //     if (ret && ret.status) {
            //         ajpush.bindAliasAndTags(param, function (ret, err) {
            //             ajpush.setListener(function (ret) {
            //                 messageDao.updateData();
            //             });
            //         });
            //     }
            // });
        }
    }

    //取消监听消息推送
    app.unListenMessage = function () {
        var ajpush = api.require('ajpush');
        ajpush.removeListener();
        ajpush.stopPush(function (ret) {
            if (ret && ret.status) {
                //success
                // console.log('out123')
            }
        });
    }

    //获取配电室列表
    app.getPowerRooms = function () {

        var url = "/ems/rest/power/room/list";
        var data = {
            "cusId": $api.getStorage("cusId")
        }

        $api.get(url, data, callback);

        function callback(ret, err) {
            if (!err) {
                // 先更新体验客户名
                var guestPrName = $api.guestPrName;
                //判断是否是体验账号，如果是体验账号，则对云端返回的数据进行拦截
                var cus = $api.getStorage('cus');
                var powerRooms = [];

                var list = ret.body;
                var length = list.length;
                for (var i = 0; i < length; i++) {
                    if (cus) {
                        list[i].prName = guestPrName;
                    }
                    powerRooms.push({
                        "prId": list[i].prId,
                        "prName": list[i].prName,
                        "configId": list[i].configId,
                    })
                }
                if (length > 0) {
                    $api.setStorage("prList", powerRooms);
                    $api.setStorage("powerRoom", powerRooms[0]);
                }

            }

        }

    }

    // 员工登陆 获取配电室列表
    //获取配电室列表
    app.getPowerRoomsByEmployee = function () {

        var url = "/ems/rest/power/room/page";
        var data = {
            "employeeId": $api.getStorage("employeeId"),
            "roleId": $api.getStorage("roleId"),
            "page": 1,
            "pageSize": 9999
        }

        $api.get(url, data, callback);

        function callback(ret, err) {
            if (!err) {
                // 先更新体验客户名
                var guestPrName = $api.guestPrName;
                //判断是否是体验账号，如果是体验账号，则对云端返回的数据进行拦截
                var cus = $api.getStorage('cus');
                var powerRooms = [];

                var list = ret.body.records;
                var length = list.length;
                for (var i = 0; i < length; i++) {
                    if (cus) {
                        list[i].prName = guestPrName;
                    }
                    powerRooms.push({
                        "prId": list[i].prId,
                        "prName": list[i].prName,
                        "configId": list[i].configId,
                    })
                }
                if (length > 0) {
                    $api.setStorage("prList", powerRooms);
                    $api.setStorage("powerRoom", powerRooms[0]);
                }

            }

        }

    }

    //获取实时报警列表
    var rtAlarmTimer;
    app.getAlarmList = function () {
        get();
        if (rtAlarmTimer) {

            clearInterval(rtAlarmTimer);

        }

        rtAlarmTimer = window.setInterval(function () {

            get();

        }, 10000);

        //避免重复监听
        api.removeEventListener({
            name: 'requestRtAlarm'
        });

        api.addEventListener({
            name: 'requestRtAlarm'
        }, function (ret, err) {
            get();
        });

        function get() {
            var url = '/ems/rest/alarm/page';

            var data = {
                "page": 1,
                "pageSize": 999999,
                "cusId": $api.getStorage('cusId'),
                "alarmStatus": 1 // 实时报警
            };

            // add s 2023/7/10
            if ($api.getStorage("userType") == 2) { // 员工
                data = {
                    "employeeId": $api.getStorage("employeeId"),
                    "roleId": $api.getStorage("roleId"),
                    "page": 1,
                    "pageSize": 999999,
                    "alarmStatus": 1 // 实时报警
                }
            }
            // add e 2023/7/10

            $api.get(url, data, function (res, err) {
                if (res && res.code == 200) {

                    $api.setStorage('rtAlarmList', res.body.records);

                    //发出登录成功的消息
                    api.sendEvent({
                        name: 'rtAlarmListUpdated'
                    });
                }

            });

        }
    }
    app.init();
}
