
import gameToast from "../Network/gameToast"
import utils from "../Network/netUtils";
cc.Class({
    extends: cc.Component,

    properties: {
    },

    // LIFE-CYCLE CALLBACKS:

    onLoad() {
        // cc.view.enableAutoFullScreen(false);
        cc.game.addPersistRootNode(this.node);

        async function dappInit() {
            console.log("初始化 dappInit");
            let dapp = GlobalD.dapp = new Dapp()
            try {
                const isTestNet = window['isTestNet'];
                // console.log('-----------开始初始化dapp!-----------');
                // console.log('isTestNet：' + window['isTestNet']);
                console.log('host：     ' + window['dappHost']);
                // console.log('dappWss:   ' + window['dappWss']);
                // console.log('-----------以上是相关设置-----------');
                await dapp.init(isTestNet)
                console.log("用户当前钱包地址:" + dapp.getAddress()) // 初始化成功，得到用户当前钱包地址
                dapp.onAccountChanged((account) => {
                    console.log('当前钱包地址发生变化', account.address) // 用户钱包地址即为登录账户，使用过程中用户可以切换钱包地址，即游戏要进行当前地址退出登录，新地址重新登录的操作
                    // this.address = account.address
                    //跳回login 页面
                    cc.director.loadScene('Login', function () {
                        //重新初始化信息
                        console.log('onAccountChanged Login');
                        dappInit();
                    }.bind(this));
                })

                dapp.onNetworkChanged((node) => {
                    console.log('当前钱包节点发生变化', node) // 切换网络，一般可以不处理，实际用户端一般不会切换
                    //跳回login 页面
                    cc.director.loadScene('Login', function () {
                        //重新初始化信息
                        console.log('onNetworkChanged Login');
                        dappInit();
                    }.bind(this));
                })

                // 获取用户信息 
                const { err, res } = await dapp.userInfo()
                if (err === null) {
                    // 返回成功，见下面消息体
                    // console.log(res)
                    GlobalD.Dapp.UserInfo = res;

                    //测试
                    // GlobalD.Dapp.UserInfo.agent_level = 0;

                    // GameNet.getInstance().init(res.id, (data) => {
                    //     console.log('GameNet:' + data);
                    // }, _self);

                    const dappLoginData = await dapp.getLoginSign();
                    GlobalD.Dapp.signData = dappLoginData;

                    // console.log("dappLoginData:"+JSON.stringify(dappLoginData));

                    //    let _temp = {
                    //         "address": dappLoginData.address, // 签名地址
                    //         "id": dappLoginData.id, // 所属账户ID
                    //         "signature": dappLoginData.signature, // 签名文本
                    //         "timestamp": dappLoginData.timestamp // 签名时间戳，需要在1分钟内完成验签，否则本次签名失效
                    //     };
                    // let _temp = {
                    //     "address": "TDw6xsVnDJWsdRBLkWAwXbv4hE2X2JQs5z", // 签名地址
                    //     "id": 1, // 所属账户ID
                    //     "signature": "0x09fda37fcad4a9bb7b72f652323881a33847be3a44e4403c7a576b3383df30ec6e5e256f28fbdbac5eb0642f304f331783f36d70b5e6fd576818bc42e14624191c", // 签名文本
                    //     "timestamp": 1641279989 // 签名时间戳，需要在1分钟内完成验签，否则本次签名失效
                    // };
                    console.log("loginTokenAndVerification========>",new Date());
                    utils.post(utils.api.loginTokenAndVerification, dappLoginData, (flag, value) => {
                        console.log("loginTokenAndVerification========>", value,new Date());
                        if (flag && 0 === value.code) {
                            /** 登录成功获取token */
                            utils.setToken(value.data.token);
                            /** 获取一个游戏的设置数据 */
                            GlobalD.GameSetting = value.data.gameSetting;
                            /** 登录时候会获取一次游戏端的 userInfo ，后续可以通过userInfo接口获取 */
                            GlobalD.UserInfo = value.data.userInfo;
                            /** 新增userInto 的 attribute */
                            GlobalD.PlayerAttribute = value.data.playerAttribute;
                            /** 推送信息 */
                            utils.get(utils.api.playerPullInfo, {}, (flag, playerPullInfoTemp) => {
                                if(!flag)return;
                                let _playerData = JSON.parse(playerPullInfoTemp.data.playerData);
                                //记录读取的数据到内存里面
                                // 正常游戏
                                userData.readData = _playerData;
                                // utils.init(GlobalD.Dapp.UserInfo.id, (data) => {
                                //     console.log('utils ws:' + data);
                                // }, _self);
                                //需要提前拉取一下土地配置，用于初始化地图土地
                                utils.get(utils.api.landConfig, {}, (flag, value) => {
                                    if (flag && 0 === value.code) {
                                        GlobalD.ConfigLand = value.data;
                                        utils.get(utils.api.userLandList, {}, (flag, value) => {
                                            if (flag && 0 === value.code) {
                                                GlobalD.UserLeaseLand = value.data;
                                                //跳转游戏
                                                cc.find("Canvas").getComponent("Login").loginButton();
                                            } else {
                                                console.warn("读取到用户的土地错误？");
                                            }
                                        })
                                    } else {
                                        console.warn("未能读取到config土地？");
                                    }
                                })
                                // //获取玩家
                                // utils.get(utils.api.playerAttribute, {}, (flag, value) => {
                                //     if (flag && 0 === value.code) {
                                //         GlobalD.playerAttribute = value.data;
                                //     } else {
                                //         console.warn("读取玩家属性错误？");
                                //     }
                                // })
                            })

                        } else {

                            console.log(flag, value);

                            cc.loader.loadRes("prefab/gameToast", (err, texture) => {
                                let _pause = cc.instantiate(texture);
                                let _uiCamera = cc.find("Canvas/MainCamera");
                                _pause.parent = _uiCamera ? _uiCamera : cc.find("Canvas");
                                _pause.zIndex = 999;
                                let DetailLabel = _pause.getChildByName('DetailLabel');
                                DetailLabel.getComponent(cc.Label).string = "获取信息失败，重新刷新进入游戏！";
                               
                            });
                        }
                    })

                } else {
                    //TODO 服务错误
                    console.log("dappInit userInfo 错误");
                    console.log(err)
                }
                // try {
                //     const data = await dapp.getLoginSign()
                //     console.log(data)
                //     // this.signData = JSON.stringify(data)
                // } catch (err) {
                //     console.log(err)
                //     alert('为了避免游戏资产被人乱用，还是校验下身份再进入游戏吧')
                // }


            } catch (err) {
                console.log('catch到的错误:' + err) // 初始化失败，运行环境不是钱包环境

                cc.loader.loadRes("prefab/gameToast", (err1, texture) => {
                    let _pause = cc.instantiate(texture);
                    let _uiCamera = cc.find("Canvas/MainCamera");
                    _pause.parent = _uiCamera ? _uiCamera : cc.find("Canvas");
                    _pause.zIndex = 999;
                    let DetailLabel = _pause.getChildByName('DetailLabel');
                    DetailLabel.getComponent(cc.Label).string = err;
                   
                });
            }
        }
        //初始化调用 dappInit;
        dappInit();
    }
});
