window.onWebViewMessage = function(data){
    let name= data.funName;
    //比如下面请求了gameInit ，这里接收app 处理返回的数据
    if(name == "onGameInit")
    {
        /**
         * onGameInit
         * 初始化游戏数据
         * gameData ：
         * avatarUrl:"",//头像url
         * avatarBase64Url:"",//base64字符串头像，后面以base64为主
         * userName:"", //名字
         * gender: 0,//"0：男，1：女"
         * caloriUnit:10，//每次跳动消耗的卡路里
         * calorieParams：{runUnit:10,jumpUnit:20}, //蹦床时候的参数
         * device：null 或 {cname:'中文名'，ename：'英文名'，name:'设备原有名字'}//'当前选择的设备信息，没选择就为空'
         */
        console.log("onGameInit ==",data.gameData);
        webView.onGameInit(data.gameData);
    }
    else if(name == "onUploadInfo")
    {
        /**
         * 上传分数后的返回，
         * gameData:
         * {}
         */
        // console.log("onUploadInfo ==",data.gameData);
        webView.onUploadInfo(data.gameData);
    }
    else if(name == "onAiRandomInfo")//获取随机AI 头像 姓名等信息
    {
        /**
         * 获取ai信息的数据回调
         * aiId: 0, //ai的id
         * aiName: "",//ai 的名字
         * aiGender: 0,//"0：男，1：女"
         * aiType: "",//网名类型
         * aiAvatarBase64: ""//base64字符串,头像
         */
        // console.log("onAiRandomInfo ==",data.gameData);
        webView.onAiRandomInfo(data.gameData);
    }
    else if(name == "onFruitInfo")//获取水果列表
    {
        /**
         * 获取水果图片信息
         * fruitBase64: "",// 水果雪碧图 base64
         * unitWidth: 100,// 雪碧图 单张图片宽
         * unitHeight: 100,// 雪碧图 单张图片高
         * unit: "px",// 雪碧图 单位
         * imageStartPosY: 0,// 雪碧图 起始图 Y方向位置
         * imageEndPosY: -1200,// 雪碧图 结束图 Y方向位置
         * fruitIndexArray: [0,0,0] // 输入卡路里后计算的返回结果，当前的数组
         */
        // console.log("onFruitInfo ==",data.gameData);
        webView.onFruitInfo(data.gameData);
    }
    else if(name == "onDeviceUpdateData")//蹦床每次操作后传回来的指令
    {
        /**
         * 设备连接成功后的返回值
         * 蹦床的返回数值,有可能两种格式
         * gameData：{F:2} , {H:-1,T:0}; //F:0:左 1:右  2:起跳  3:降落  -1: 无状态   T 0--无时间   -1：超时   H 0：左手 1：右手
         */
        // console.log("onDeviceUpdateData ==",data.gameData);
        webView.onDeviceUpdateData(data.gameData);
    }
    else if(name == "onDeviceState"){
        /**
         * 暂时只返回设备数据连接错误信息
         * gamedata = {state: -1, 	msg: "设备数据错误"}
         */
        // console.log("onDeviceState ==",data.gameData);
        webView.onDeviceUpdateData(data.gameData);
    }
    else if(name == "onDeviceClose"){

        /**
         * 和设备断开连接时候回调
         * gamedata = {msg: '设备断开连接。'}
         */
        // console.log("onDeviceClose ==",data.gameData);
        webView.onDeviceUpdateData(data.gameData);
    }
    else if(name == "onUrlToBase64"){
        // console.log("onUrlToBase64 ==",data.gameData);
        webView.onUrlToBase64(data.gameData);
    }
    else if (name == "onWatchAccelerometer") {
        /**
         * 返回加速计的数据
         * {
         *      xAxis
         *      yAxis
         *      zAxis
         * }
         */
        // console.log("onWatchAcc == ", data.gameData);
        webView.onWatchAccelerometer(data.gameData);
    }
    else if (name == "onWatchOrientation") {
        /**
         * 返回加速计的数据
         * {
         *      xAxis
         *      yAxis
         *      zAxis
         * }
         */
        // console.log("onWatchOri == ", data.gameData);
        webView.onWatchOrientation(data.gameData);
    }
    else if(name == "onBoxingPostHit"){

        // console.log("onBoxingPostHit == ", data.gameData);
        webView.onBoxingPostHit(data.gameData);
    }
    else if (name == "onQuit") {
        console.log("onQuit == ", data.gameData);
        webView.onQuit(data.gameData);
    } else if (name == "onQuitModal") {
        console.log("onQuitModal == ", data.gameData);
        webView.onQuitModal(data.gameData);
    }

    else if( name == "onQuitModalListener"){
        console.log("onQuitModalListener == ", data.gameData);
    }
};

let webView = {
    bValid:false,
    avatarBase64: null,
    avatarSpriteFrame: null,
    avatarUrl:'',
    userName: '',
    gender: 0,
    rivalavatarBase64: null,
    rivalAvatarSpriteFrame: null,
    rivalavatarUrl:'',
    rivalUserName: '',
    rivalGender: 1,
    listenerArr: [],
    videoName:'',
    kCalUnit:0,
    register(listener)//注册后实现对应的回调函数 可以监听到回调
    {
        //TODO
        // 要判断对象是否已经注册过,如果存在不注册
        this.listenerArr.push(listener);
    },
    unRegister(listener) {
        //TODO
        // 要判断对象是否已经注册过,如果存在才可以删除
        this.remove(this.listenerArr, listener);
    },
    dispatchEvent(eventName, data)//把所有的监听事件分发给所有接收到回调的节点
    {
        for (let i = 0; i < this.listenerArr.length; i++) {
            this.listenerArr[i].emit(eventName, data);
        }
    },
    init(listener,callback) {
        this.callback = callback;
        this.bValid = true;
        this.register(listener);//初始化的时候默认直接注册对象,不需要重复注册.
        this.gameInitEvent();
    },
    gameInitEvent() {
        // 向服务器自己获取初始化信息
        uni.postMessage({
            data: {
                funName: "gameInit",
                gameData: {}
            }
        });
    },
    InitLocal(gameData)//初始化自己的头像,姓名等信息
    {
        this.avatarUrl = gameData.avatarUrl;
        this.avatarBase64 = gameData.avatarBase64Url;
        this.userName = gameData.userName;
        this.gender = gameData.gender;
        this.videoName = gameData.item.name;
        this.kCalUnit = gameData.calorieParams.hitUnit;
        this.callback();
    },
    uploadInfo(score, gameTime, calorie) {//最后胜利把信息发给服务器记录和统计
        uni.postMessage({
            data: {
                funName: "uploadInfo",
                gameData: {
                    gameScore: score == "" ? 100 : score,//游戏得分
                    gameTime: gameTime == "" ? 100 : gameTime,//单位秒
                    calorieBurned: calorie == "" ? 1000 : calorie,//消耗的卡路里
                }
            }
        });
    },
    getAiInfo(callback) {//获取随机AI信息
        this.callback = callback;
        uni.postMessage({
            data: {
                funName: "aiRandomInfo",
                gameData: {}
            }
        })
    },
    getFruitInfo(calorie) {//获取水果
        uni.postMessage({
            data: {
                funName: "fruitInfo",
                gameData: {
                    calorie: 1150
                }
            }
        })
    },
    getBase64(url){
        uni.postMessage({
            data:{
                funName:"urlToBase64",
                gameData:{
                    url:url
                }
            }
        })
    },
    onBind() {
        uni.postMessage({
            data: {
                funName: "openAccelerometer",
                gameData: {}
            }
        })
    },
    onUnBind() {
        uni.postMessage({
            data: {
                funName: "closeAccelerometer",
                gameData: {}
            }
        })
    },
    onBindBoxingPost(){
        uni.postMessage({
            data: {
                funName: "bindBoxingPost",
                gameData: {}
            }
        })
    },
    onModify(){
        uni.postMessage({
            data: {
                funName: "setAngleRatio",
                gameData: {
                    angleRatio:0.5 //z / x 值越小，代表直拳的判断方位越大
                }
            }
        })
    },
    onBindHitBoxingPost(){
        uni.postMessage({
            data: {
                funName: "bindHitBoxingPost",
                gameData: {}
            }
        })
    },
    onUnbindHitBoxingPost(){
        uni.postMessage({
            data: {
                funName: "unbindHitBoxingPost",
                gameData: {}
            }
        })
    },
    closeGame(){
        // console.log(data);
        uni.postMessage({
            data: {
                funName: "closeGame",
                gameData: {}
            }
        });
    },
    onAddQuitModalListener(){

        uni.postMessage({
            data: {
                funName: "addQuitModal",
                gameData: {}

            }
        });
    },
    onRemoveQuitModalListener(){

        uni.postMessage({
            data: {
                funName: "removeQuitModal",
                gameData: {}

            }
        });
    },
    indexOf(arr, item) {//判断元素在数组第几位
        for (let i = 0; i < arr.length; i++) {
            if (arr[i] == item) return i;
        }
        return -1;
    },
    remove(arr, item) {//移除数组中制定元素
        let index = arr.indexOf(item);
        if (index > -1) {
            arr.splice(index, 1);
        }
    },
    // callBack
    onGameInit(data) {
        webView.InitLocal(data);
        webView.dispatchEvent('onGameInit',data);
    },
    onUploadInfo(data) {
        webView.dispatchEvent('onUploadInfo',data);
    },
    onAiRandomInfo(data) {
        this.rivalavatarBase64 = data.aiAvatarBase64Url;
        this.rivalUserName = data.aiName;
        this.rivalGender = data.aiGender;
        webView.dispatchEvent('onAiRandomInfo',data);
    },
    onFruitInfo(data) {
        // this.setImageBase64(data.fruitBase64,function (texture) {
        //
        // });
        webView.dispatchEvent('onFruitInfo',data);
    },
    onDeviceUpdateData(data) {
        // if(!window.gameMode) return;
        //
        // if(data.F == 0)
        // {
        //     console.log("F == 0");
        //     window.gameMode.pConSt1.speedUp();
        //
        // }else  if(data.F == 1)
        // {
        //     console.log("F == 1");
        //     window.gameMode.pConSt1.speedUp();
        // }
        // else  if(data.F == 2)
        // {
        //     console.log("F == 2");
        //     window.gameMode.pConSt1.jump();
        // }
        webView.dispatchEvent('onDeviceUpdateData',data);
    },
    onDeviceState(data) {
        webView.dispatchEvent('onDeviceState',data);
    },
    onDeviceClose(data) {
        webView.dispatchEvent('onDeviceClose',data);
    },
    onUrlToBase64(data)
    {
        webView.dispatchEvent('onUrlToBase64',data);
    },
    onWatchAccelerometer(data) {
        /**
         * 返回加速计的数据
         * {
         *      xAxis
         *      yAxis
         *      zAxis
         * }
         */
        webView.dispatchEvent('onWatchAccelerometer',data);
    },
    onWatchOrientation(data)
    {
        /**
         * 返回加速计的数据
         * {
         *      xAxis
         *      yAxis
         *      zAxis
         * }
         */
        webView.dispatchEvent('onWatchOrientation',data);
    },
    onBoxingPostHit(data)
    {
        webView.dispatchEvent('onBoxingPostHit',data);
    },
    onQuit(data)
    {
        webView.dispatchEvent('onQuit',data);
    },
    onQuitModal(data)
    {
        webView.dispatchEvent('onQuitModal',data);
    }
};
module.exports = webView;