// app.js
import {
    loginLog,
    userLogin,
    getMyInfo,
    bindDevice
} from '~/api/user'
import {
    createStoreBindings
} from 'mobx-miniprogram-bindings'
import {
    store
} from '~/store/index'
let storeBindings
App({
    async onLaunch() {
        // #if MP
        this.updateApplet()
        this.checkIsIos()
        // #elif ANDROID
        this.initPlugin()
        // #endif
        this.getNavbarInfo()
        await loginLog()
    },
    async onShow(options) {
        if (!this.storeBindings) {
            this.storeBindings = createStoreBindings(this, {
                store,
                actions: ['setUser']
            })
        }
        let {
            path,
            scene,
            query
        } = wx.getEnterOptionsSync()
        //判断是不是扫海报进入
        if (query.scene && [1047, 1048].includes(scene) && path == 'pages/index/index') {
            let params = decodeURIComponent(query.scene).split('&')
            if (params.length == 1) {
                this.login(params[0])
            } else {
                this.login()
            }
        } else {
            let shareUid = options.query.uid || ''
            let userChannelCode = '3001'
            // console.log("朋友圈广告进入");
            if ([1045, 1046, 1084].includes(scene)) {
                userChannelCode = '4001'
            }
            this.login(shareUid, userChannelCode)
        }
    },
    async login(shareUid, userChannelCode = '3001') {
        let uid = wx.getStorageSync('uid')
        if (uid) {
            let userInfo = await getMyInfo()
            this.setUser(userInfo.user)
            this.globalData.userInfo = userInfo.user
            this.deviceLogin()
            if (getApp().callBack) {
                getApp().callBack();
            }
        } else {
            // #if MP
            this.getWXCode().then(async res => {
                if (res.code) {
                    // 获取openid
                    let data = {
                        code: res.code,
                        userChannelCode
                    }
                    if (shareUid != 'undefined' && shareUid) {
                        data.shareUid = shareUid
                    }
                    let userRes = await userLogin(data)
                    this.setUser(userRes.data)
                    wx.setStorageSync('uid', userRes.data.uid)
                    wx.setStorageSync('user', userRes.data)
                    this.globalData.userInfo = userRes.data
                    this.deviceLogin()
                    if (getApp().callBack) {
                        getApp().callBack(userRes);
                    }
                }
            })
            // #elif ANDROID
            this.setUser({
                grade: 'PRIMARY_FIRST_GRADE'
            })
            // #endif
        }
    },
    getWXCode() {
        return new Promise((reslove, reject) => {
            wx.login({
                success: async (res) => {
                    if (res.code) {
                        reslove(res)
                    } else {
                        reject(res.errMsg)
                    }
                }
            })

        })
    },
    checkIsIos: function () {
        wx.getSystemInfo({
            success: (res) => {
                if (res.system.search('iOS') != -1) {
                    this.globalData.isIOS = true
                }
                let {
                    scene
                } = wx.getLaunchOptionsSync()
                // 1023	安卓系统桌面图标,1104微信聊天主界面下拉,「我的小程序」栏(基础库2.2.4-2.29.0版本废弃,2.29.1版本起生效) 
                if (scene != 1023) {
                    let preTime = wx.getStorageSync('preDesktopTime')
                    let flag = !preTime ? true : (new Date() - preTime) / 43200000 > 1 ? true : false
                    if (flag || !preTime) {
                        this.globalData.desktopTips = true
                        wx.setStorage({
                            key: "preDesktopTime",
                            data: new Date()
                        })
                    }
                }
            }
        })
    },
    // 音箱端登录
    deviceLogin() {
        // #if MP
        let {
            path,
            scene,
            query
        } = wx.getEnterOptionsSync()
        // 1047	扫描小程序码	1048长按图片识别小程序码
        var gradeObj = Object.keys({
            "PRESCHOOL": "学前班",
            "PRIMARY_FIRST_GRADE": "一年级",
            "PRIMARY_SECOND_GRADE": "二年级",
            "PRIMARY_THREE_GRADE": "三年级",
            "PRIMARY_SENIOR_GRADE": "四年级",
            "PRIMARY_FIVE_GRADE": "五年级",
            "PRIMARY_SIX_GRADE": "六年级",
        })
        if (query.scene && [1047, 1048].includes(scene) && path == 'pages/index/index') {
            let params = decodeURIComponent(query.scene).split('&')
            if (params.length > 1) {
                bindDevice({
                    deviceCode: params[0],
                    channelCode: params[1],
                    grade: gradeObj[params[2]],
                    uid: wx.getStorageSync('uid')
                }).then(res => {
                    console.log(res);
                })
            }
        }
        // #endif
    },
    getNavbarInfo() {
        // 获取系统信息
        const systemInfo = wx.getSystemInfoSync();
        // 胶囊按钮位置信息
        const menuButtonInfo = wx.getMenuButtonBoundingClientRect();
        // 导航栏高度 = 状态栏高度 + 44
        this.globalData.navBarHeight = systemInfo.statusBarHeight + 44;
        this.globalData.menuRight = systemInfo.screenWidth - menuButtonInfo.right;
        this.globalData.menuTop = menuButtonInfo.top;
        this.globalData.menuHeight = menuButtonInfo.height;
        // 设备显示区域的宽度,单位px
        this.globalData.windowWidth = systemInfo.windowWidth
        this.globalData.windowHeight = systemInfo.windowHeight
    },
    updateApplet() {
        // 获取小程序更新机制兼容
        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: '新版本已经上线啦~,请您删除当前小程序,重新搜索打开哟~',
                        })
                    })
                }
            })
        }
    },
    initPlugin() {
        let miniAppPluginId = 'wxf1a06dafa3350688'
        //根据模块ID初始化模块
        console.log("插件ID:" + miniAppPluginId)
        wx.miniapp.loadNativePlugin({
            pluginId: miniAppPluginId,
            success: (plugin) => {
                this.globalData.plugin = plugin
                console.log('load plugin success', plugin)
                this.globalData.plugin.initPlugin(({}), (res) => {
                    if (res === "success") {
                        console.log("初始化plugin成功")
                    } else {
                        console.log("初始化plugin失败")
                    }
                })
            },
            fail: (e) => {
                console.log('load plugin fail', e)
            }
        })
    },
    globalData: {
        userInfo: null,
        isIOS: false, // 判断设备是否为苹果
        desktopTips: false,
        navBarHeight: 0, // 导航栏高度
        menuRight: 0, // 胶囊距右方间距(方保持左、右间距一致)
        menuTop: 0, // 胶囊距底部间距(保持底部间距一致)
        menuHeight: 0, // 胶囊高度(自定义内容可与胶囊高度保证一致)
        windowWidth: 0,
        windowHeight: 0,
        plugin: {}
    }
})