const util = require('./utils/util.js');
const api = require('./config/api');


const bayCbs = []

! function () {
    var PageTmp = Page;
    Page = function (pageConfig) {
        // 设置全局默认分享
        let tempShare = pageConfig.onShareAppMessage
        pageConfig.onShareAppMessage = function(...args) {
            let pages = getCurrentPages()
            let path = pages[pages.length - 1].route;
            let defconfig = {
                title: '【好友分享】一起云逛店吧~',
                desc: '【好友分享】一起云逛店吧~',
                path: path,
                imageUrl: 'https://houseoss.4dkankan.com/4dHouse/miniprogram/aaa.jpg',
            };

            let currConfig = tempShare && tempShare.call(this, ...args)
            let config = defconfig
            if (currConfig) {
                config = {
                    ...defconfig,
                    ...currConfig,
                }
            }

            return config
        }

        let onShow = pageConfig.onShow
        pageConfig.onShow = function(...args) {
            getApp().setLoginProps(true)
            
            return onShow && onShow.call(this, ...args)
        }

        PageTmp(pageConfig);
    };
}();

const voiceCbs = []
const voiceProps = {
    noMute: false,
    pullUrls: [],
    pushUrl: false,
}
const loginCbs = []
const loginProps = {
    isLogin: true
};

App({
    onShareAppMessage() {
        console.log('--------------------')
    },
    onLaunch: function () {
        //获取小程序更新机制兼容
        if (wx.canIUse('getUpdateManager')) {
            const updateManager = wx.getUpdateManager()
            updateManager.onCheckForUpdate(function (res) {
                // 请求完新版本信息的回调
                if (res.hasUpdate) {
                    updateManager.onUpdateReady(function () {
                        wx.showModal({
                            title: '更新提示',
                            content: '新版本已经准备好，是否重启应用？',
                            success: function (res) {
                                if (res.confirm) {
                                    // 新的版本已经下载好，调用 applyUpdate 应用新版本并重启
                                    updateManager.applyUpdate()
                                }
                            }
                        })
                    })
                    updateManager.onUpdateFailed(function () {
                        // 新的版本下载失败
                        wx.showModal({
                            title: '已经有新版本了哟~',
                            content: '新版本已经上线啦~，请您删除当前小程序，重新搜索打开哟~',
                        })
                    })
                }
            })
        } else {
            // 如果希望用户在最新版本的客户端上体验您的小程序，可以这样子提示
            wx.showModal({
                title: '提示',
                content: '当前微信版本过低，无法更好体验程序，请升级到最新微信版本后重试。'
            })
        }
        this.onGetSysInfo()
    },
    globalData: {
        voiceProps,
        loginProps,
        userInfo: {
            nickName: 'Hi,游客',
            userName: '点击去登录',
            avatarUrl: 'https://platform-wxmall.oss-cn-beijing.aliyuncs.com/upload/20180727/150547696d798c.png'
        },
        token: '',
        userCoupon: 'NO_USE_COUPON', //默认不适用优惠券
        courseCouponCode: {}, //购买课程的时候优惠券信息
        isiPhoneX: false,
        isLogin: false
    },

    addVoicePropsListener(cb) {
        voiceCbs.push(cb)
    },

    removeVoicePropsListener(cb) {
        voiceCbs.splice(voiceCbs.indexOf(cb), 1)
    },
    setVoiceProps(props) {
        console.log(props, 'props')
        Object.keys(props).forEach(k => {
            voiceProps[k] = props[k]
        })
        voiceCbs.forEach(cb => cb(props))
    },

    addLoginListener(cb) {
        loginCbs.push(cb)
    },

    removeLoginListener(cb) {
        loginCbs.splice(loginCbs.indexOf(cb), 1)
    },

    setLoginProps(props) {
        loginProps.isLogin = props
        loginCbs.forEach(cb => cb())
    },
    

    onGetSysInfo() {
        // 先缓存获取
        let isiPhoneX = wx.getStorageSync('isiPhoneX') || false
        // 缓存没有 再获取
        if (!isiPhoneX) {
            wx.getSystemInfo({
                success: res => {
                    // 手机品牌
                    let modelmes = res.model;
                    console.log('mode---------------lmes', modelmes)
                    // 如果是 X,XS,XR,XS MAX 均可适配
                    if (modelmes.indexOf('iPhone X') != -1) {
                        // 存储型号
                        this.globalData.isiPhoneX = true
                        wx.setStorageSync('isiPhoneX', true)
                        // 加入回调
                        this.sysCallback && this.sysCallback()
                    }
                },
            })
        } else {
            this.globalData.isiPhoneX = isiPhoneX
        }
    },
    // 下拉刷新
    onPullDownRefresh: function () {
        // 显示顶部刷新图标
        wx.showNavigationBarLoading();
        var that = this;
        // 隐藏导航栏加载框
        wx.hideNavigationBarLoading();
        // 停止下拉动作
        wx.stopPullDownRefresh();

        this.checkNetStatu()
    },
    // 更新小程序
    updateManager: function () {
        //获取系统信息 客户端基础库
        wx.getSystemInfo({
            success: function (res) {
                //基础库版本比较，版本更新必须是1.9.90以上
                const v = util.compareVersion(res.SDKVersion, '1.9.90');
                if (v > 0) {
                    const manager = wx.getUpdateManager();
                    manager.onCheckForUpdate(function (res) {
                        // 请求完新版本信息的回调
                        //console.log(res.hasUpdate);
                    });
                    manager.onUpdateReady(function () {
                        wx.showModal({
                            title: '更新提示',
                            content: '新版本已经准备好，是否重启应用？',
                            success: function (res) {
                                if (res.confirm) {
                                    // 新的版本已经下载好，调用 applyUpdate 应用新版本并重启
                                    manager.applyUpdate();
                                }
                            }
                        })
                    });
                    manager.onUpdateFailed(function () {
                        // 新的版本下载失败
                    });
                } else {
                    // wx.showModal({
                    //   title: '温馨提示',
                    //   content: '当前微信版本过低，无法更好体验程序，请升级到最新微信版本后重试。'
                    // })
                }
            },
        })
    },

    getCurrentPages: function () {
        var pages = getCurrentPages(); //获取加载的页面
        var currentPage = pages[pages.length - 1]; //获取当前页面的对象
        var url = currentPage.route; //当前页面url
        var options = currentPage.options; //获取url中所带的参数
        //拼接url的参数
        var currentPage = url + '?';
        for (var key in options) {
            var value = options[key]
            currentPage += key + '=' + value + '&';
        }
        currentPage = currentPage.substring(0, currentPage.length - 1);
        return currentPage;
    },


    orderBuyCbs(cb) {
        bayCbs.push(cb)
    },

    callOrderBuyCbs(...args) {
        for (let i = 0; i < bayCbs.length; i++) {
            bayCbs[i](...args)
        }
    },


    async checkNetStatu() {
        if (!(await util.checkNetStatu())) {
            return wx.redirectTo({
                url: '/pages/offline/offline?url=' + decodeURI(this.getCurrentPages()),
            })
        }
    },

    updateCardCount() {
        util.request(api.CartList).then((res) => {
            //显示红字，badge
            if (!res.data || !res.data.cartTotal) {
                return
            }
            // global.setTabBarBadge({
            //     index: 3,
            //     text: res.data.cartTotal.goodsCount ,
            // });
            if (res.data.cartTotal.goodsCount) {
                wx.setTabBarBadge({
                    index: 3,
                    text: res.data.cartTotal.goodsCount + '',
                });
            } else {
                wx.removeTabBarBadge({
                    index: 3,
                });
            }
        })
    },
    onLaunch() {
        console.error('第一次进来')
        wx.setStorageSync('lastSceneNum', null)
    }
})