document.cookie = "test=demo";

// worker获取主线程资源
var CookieAction = BI.inherit(BI.Workers.WorkerBaseAction, {
    addActionHandler: function() {
        this.controller.addActionHandler("Cookie", this.getCookie.bind(this));
    },

    getCookie: function() {
        return document.cookie;
    }
});

// 调用worker计算
var FibonacciAction = BI.inherit(BI.Workers.WorkerBaseAction, {
    addActionHandler: function() {},

    getResult: function(times) {
        return this.controller.requestPromise("Fibonacci", { times: times })
            .then(function(v) {
                console.log(v);
            });
    }
});

// 主线程与worker多次交互
const HeartBeatCheckAction = BI.inherit(BI.Workers.WorkerBaseAction, {
    addActionHandler: function() {
        this.controller.addActionHandler("HeartBeatChecked", this.recieveHeartBeatChecked.bind(this));
    },

    recieveHeartBeatChecked: function (payload) {
        console.log("heartbeat: " + payload.time);
    },

    startHeatBeatCheck: function() {
        return this.controller.request("HeartBeatCheckStart");
    },

    stopHeatBeatCheck: function() {
        return this.controller.request("HeartBeatCheckStop");
    }
});

var MainThreadWorker = BI.inherit(BI.Workers.MainThreadWorker, {
    initActions: function() {
        this.cookieAction = this.createAction(CookieAction);

        this.fibonacciAction = this.createAction(FibonacciAction);

        this.heartBeatCheckAction = this.createAction(HeartBeatCheckAction);
    },

    calculateFibonacci: function(times) {
        this.fibonacciAction.getResult(times);
    },

    startHeatBeatCheck: function() {
        this.heartBeatCheckAction.startHeatBeatCheck();
    },

    stopHeatBeatCheck: function() {
        this.heartBeatCheckAction.stopHeatBeatCheck();
    }
});

var mainThreadWorker = BI.Workers.createWorker(MainThreadWorker, {
    workerUrl: "./worker_new/worker.js",
    workerName: "demo"
});

BI.createWidget({
    type: "bi.vertical",
    element: "#wrapper",
    vgap: 10,
    hgap: 10,
    items: [
        {
            type: "bi.button",
            text: "点击计算斐波那契数列第40项",
            width: 200,
            handler: function() {
                console.log("click");
    
                mainThreadWorker.calculateFibonacci(40);
            }
        },
        {
            type: "bi.button",
            text: "开始心跳",
            width: 200,
            handler: function() {
                mainThreadWorker.startHeatBeatCheck();
            }
        },
        {
            type: "bi.button",
            text: "停止心跳",
            width: 200,
            handler: function() {
                mainThreadWorker.stopHeatBeatCheck();
            }
        }
    ]
});