<script>
//app.js
import { $http } from './config/https.js';
import { httpconfig } from './config/httpconfig';
import Cache  from './utils/cache';
import messageUtil from './utils/message.js';
// #ifdef H5
import wechath5 from './utils/wechath5.js';
// #endif
export default {
    data() {
        return {};
    },
    globalData: {
        share: false,

        // 分享默认为false
        height: 0,

        statusBarHeight: uni.getWindowInfo()['statusBarHeight'],
        overlayVisible: false,
        imageIconDomain: httpconfig.imgDomain,
        appID: '',
        sessionKey: '',
        timObj: null,

        /**
         * 获取App信息
         */
        getAppInfo: function () {
            // #ifdef H5 || !MP-WEIXIN
            // H5 或非微信小程序环境，跳过 getAccountInfoSync（仅小程序可用）
            // #endif
            // #ifdef MP-WEIXIN
            var accountInfo = uni.getAccountInfoSync();
            var appID = accountInfo.miniProgram.appId;
            // 登录接口
            let data = {
                params: [
                    {
                        appID: appID,
                        flag: 'D'
                    }
                ]
            };
            let that = this;
            $http.post('urlDeault', this, {
                code: '03100143',
                data: data,
                success: function (res) {
                    if (res.errorCode == '0') {
                        Cache.set('appInfo', res.result);
                        uni.setNavigationBarTitle({
                            title: res.result.docAppName
                        });
                    }
                }
            });
            // #endif

            // #ifdef H5
            // H5 中 uni.getAccountInfoSync 可能返回公众号/外层容器 appId，医生端固定使用配置的 appID。
            const h5AppID = httpconfig.doctorAppID || '';
            if (h5AppID) {
                console.log('[App] getAppInfo appID:', h5AppID);
                $http.post('urlDeault', this, {
                    code: '03100143',
                    data: { params: [{ appID: h5AppID, flag: 'D' }] },
                    success: function (res) {
                        if (res.errorCode == '0') {
                            Cache.set('appInfo', res.result);
                            console.log('[App] getAppInfo 成功，触发 messageUtil.initTim()');
                            try {
                                messageUtil.initTim();
                            } catch (e) {
                                console.warn('[App] initTim after getAppInfo failed:', e);
                            }
                        }
                    }
                });
            }
            // #endif
        },

        /**
         * 自动更新
         */
        autoUpdate: function () {
            // getUpdateManager 仅微信小程序支持
            if (typeof uni.getUpdateManager !== 'function') return;
            var that = this;
            // 获取小程序更新机制兼容
            if (uni.canIUse('getUpdateManager')) {
                const updateManager = uni.getUpdateManager();
                //1. 检查小程序是否有新版本发布
                updateManager.onCheckForUpdate(function (res) {
                    // 请求完新版本信息的回调
                    if (res.hasUpdate) {
                        //检测到新版本，需要更新，给出提示
                        uni.showModal({
                            title: '更新提示',
                            content: '检测到新版本，是否下载新版本并重启小程序？',
                            success: function (res) {
                                if (res.confirm) {
                                    //2. 用户确定下载更新小程序，小程序下载及更新静默进行
                                    that.downLoadAndUpdate(updateManager);
                                } else if (res.cancel) {
                                    //用户点击取消按钮的处理，如果需要强制更新，则给出二次弹窗，如果不需要，则这里的代码都可以删掉了
                                    uni.showModal({
                                        title: '温馨提示~',
                                        content: '本次版本更新涉及到新的功能添加，旧版本无法正常访问的哦~',
                                        showCancel: false,
                                        //隐藏取消按钮
                                        confirmText: '确定更新',
                                        //只保留确定更新按钮
                                        success: function (res) {
                                            if (res.confirm) {
                                                //下载新版本，并重新应用
                                                that.downLoadAndUpdate(updateManager);
                                            }
                                        }
                                    });
                                }
                            }
                        });
                    }
                });
            } else {
                // 如果希望用户在最新版本的客户端上体验您的小程序，可以这样子提示
                uni.showModal({
                    title: '提示',
                    content: '当前微信版本过低，无法使用该功能，请升级到最新微信版本后重试。'
                });
            }
        },

        /**
         * 下载小程序新版本并重启应用
         */
        downLoadAndUpdate: function (updateManager) {
            var that = this;
            uni.showLoading();
            //静默下载更新小程序新版本
            updateManager.onUpdateReady(function () {
                uni.hideLoading();
                //新的版本已经下载好，调用 applyUpdate 应用新版本并重启
                updateManager.applyUpdate();
            });
            updateManager.onUpdateFailed(function () {
                // 新的版本下载失败
                uni.showModal({
                    title: '已经有新版本了哟~',
                    content: '新版本已经上线啦~，请您删除当前小程序，重新搜索打开哟~'
                });
            });
        }
    },
    methods: {
        prefetchH5PageModulesInDev() {
            if (!import.meta.env || !import.meta.env.DEV) return;
            const pageLoaders = Object.values(import.meta.glob('./pages/**/*.vue'));
            const concurrency = 4;
            let cursor = 0;
            const run = async () => {
                while (cursor < pageLoaders.length) {
                    const loader = pageLoaders[cursor++];
                    try {
                        await loader();
                    } catch (error) {
                        console.warn('[dev:h5] prefetch page module failed:', error);
                    }
                }
            };
            for (let i = 0; i < concurrency; i += 1) {
                run();
            }
        }
    },
    onLaunch: function (options = {}) {
        console.log('getDeviceInfo==', uni.getWindowInfo());
        this.globalData.getAppInfo();
        this.globalData.autoUpdate();
        // uni.removeStorageSync('userData');
        Cache.remove('TIMInfo');
        const windowInfo = uni.getWindowInfo();
        if (windowInfo) {
            this.globalData.height = windowInfo.statusBarHeight;
        }

        // #ifdef H5
        this.prefetchH5PageModulesInDev();
		options = options || { query: {} };
		if(options && options.query.state) {
			this.globalData.pubAccCode = options.query.state
			const userData = Cache.get("userData")
			Cache.set("userData", {
				...userData,
				pubAccCode: options.query.state
			})
		}

		let userData = Cache.get("userData");
		console.log('userData === ', userData)
		if (!userData || (userData && !userData.openid)) {
			const code = options.query.code
			const pubAccCode = userData?.pubAccCode || ''
			wechath5.authLogin(code, pubAccCode).then(res => {
				console.log('获取APPID成功', res)
                Cache.set("userData", {
                    ...userData,
                    openID: options.query.state
                })
			})
		}
		// #endif
    },
    //当应用程序进入前台显示状态时触发
    onShow() {
        if (typeof uni.showShareMenu === 'function') {
            uni.showShareMenu();
        }
    },
    //当应用程序进入后台状态时触发
    onHide() {
        console.log('ApponHide');
    }
};
</script>
<style>

.container {
    height: 100%;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: space-between;
    box-sizing: border-box;
    background: #fff;
    font-family: Arial, Helvetica, sans-serif;
}

/* 全局设置所有页面属性 */
page {
    width: 100%;
    min-height: 100%;
    box-sizing: border-box;
    background-color: #f5f4f4;
    color: #333;
    font-size: 28rpx;
    overflow-x: hidden;
}

html,
body,
#app,
uni-page,
uni-page-body {
    width: 100%;
    min-height: 100%;
    margin: 0;
    box-sizing: border-box;
}

view,
scroll-view,
swiper,
button,
input,
textarea {
    box-sizing: border-box;
}

/**
全局样式 栅格布局 页面全等分12份
如：
<view class="row">
    <view class="col">
        <view class="col-3"></view>
        <view class="col-9"></view>
    </view>
</view>
**/
/*  清除浮动 */
.clearn:after {
    content: '';
    height: 0;
    line-height: 0;
    display: block;
    visibility: hidden;
    clear: both;
}

.row {
    display: block;
    margin: 0px;
}

.col {
    font-family: -apple-system-font, 'Helvetica Neue', sans-serif;
    font-size: 17px;
}

.col > .col-1,
.col-1,
.col-2,
.col-3,
.col-4,
.col-5,
.col-6,
.col-7,
.col-8,
.col-9,
.col-10,
.col-11,
.col-12 {
    float: left;
    position: relative;
}

.col-1 {
    width: 8.33333333333333%;
}

.col-2 {
    width: 16.6666666666666%;
}

.col-3 {
    width: 25%;
}

.col-4 {
    width: 33.3333333333333%;
}

.col-5 {
    width: 41.6666666666666%;
}

.col-6 {
    width: 50%;
}

.col-7 {
    width: 58.333333333333333%;
}

.col-8 {
    width: 66.66666666666666%;
}

.col-9 {
    width: 75%;
}

.col-10 {
    width: 83.33333333333333%;
}

.col-11 {
    width: 91.66666666666666%;
}

.col-12 {
    width: 100%;
}

/* picker整行点击样式 */
.pickerAbs {
    position: absolute;
    left: 0;
    top: 0;
    text-align: right;
    width: 100%;
}

.pickerView {
    position: absolute;
    left: 0;
    top: 0;
    text-align: right;
    width: 100%;
    padding: 10px 0;
}

/* 不可选样式 */
.dis {
    background: #eee;
}

/* 必填样式 */
.required:before {
    display: inline-block;
    margin-right: 0.106667rem;
    color: #ff4d4f;
    font-family: SimSun, sans-serif;
    line-height: 1;
    content: '*';
}

/* 公共基础样式 */

.floatR {
    float: right;
}

.floatL {
    float: left;
}

.textCenter {
    text-align: center;
}

.textLeft {
    text-align: left;
}

.textRight {
    text-align: right;
}

.ml10 {
    margin-left: 10rpx;
}

.ml20 {
    margin-left: 20rpx;
}

.mr20 {
    margin-right: 20rpx;
}

.mb20 {
    margin-bottom: 20rpx;
}

.mt20 {
    margin-top: 20rpx;
}

.plr20 {
    padding: 0 20rpx;
}

.fontS25 {
    font-size: 25rpx;
}

.fontS30 {
    font-size: 30rpx;
}

.fontWeight {
    font-weight: bold;
}

.borderB2 {
    border-bottom: 2rpx solid #eee;
}
</style>
