import {ref} from "vue"
import cacheManager from "./cacheManager";

export function useVersionUpdate() {

    const progress = ref(0);
    let downloadTask = null;

    function checkInstallPermission() {
        // 获取主Activity对象
        const mainActivity = plus.android.runtimeMainActivity();
        // 获取PackageManager对象
        const packageManager = mainActivity.getPackageManager();

        // 正确方式：使用plus.android.invoke调用方法
        const canRequest = plus.android.invoke(packageManager, "canRequestPackageInstalls");

        if (canRequest) {
            console.log("应用有安装权限");
            return true;
        } else {
            console.log("应用无安装权限，需要请求");
            return false;
        }
    }


    function requestInstallPermission() {
        return new Promise((resolve) => {
            // 跳转到允许安装未知来源应用的设置界面
            const Intent = plus.android.importClass("android.content.Intent");
            const Settings = plus.android.importClass("android.provider.Settings");

            const mainActivity = plus.android.runtimeMainActivity();
            const intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);

            // 设置应用的包名
            const uri = plus.android.invoke(
                plus.android.invoke("android.net.Uri", "parse", "package:" + plus.runtime.appid)
            );
            intent.setData(uri);

            // 启动Activity并处理结果
            mainActivity.startActivityForResult(intent, 1001);

            // 监听Activity结果（需要在App.vue的onActivityResult中全局监听）
            plus.globalEvent.addEventListener("onActivityResult", (result) => {
                if (result.requestCode === 1001) {
                    // 再次检查权限状态
                    checkInstallPermission().then(hasPermission => {
                        resolve(hasPermission);
                    });
                }
            });
        });
    }

    function downloadAndInstallApk(apkUrl) {
        return new Promise((resolve, reject) => {
            uni.showLoading({ title: '下载中...', mask: true });

            uni.downloadFile({
                url: apkUrl,
                success: (downloadResult) => {
                    uni.hideLoading();
                    // 清理原始缓存 防止新版本缓存 遭遇原始缓存问题
                    cacheManager.clearAll();
                    if (downloadResult.statusCode === 200) {
                        const tempFilePath = downloadResult.tempFilePath;

                        // 安装APK
                        plus.runtime.install(tempFilePath, { force: true }, () => {
                            uni.showToast({ title: '安装成功', icon: 'success' });
                            setTimeout(() => {
                                plus.runtime.restart(); // 重启应用
                            }, 1500);
                            resolve();
                        }, (err) => {
                            console.error('安装失败: ', err);
                            uni.showToast({ title: '安装失败', icon: 'none' });
                            reject(err);
                        });
                    }
                },
                fail: (error) => {
                    uni.hideLoading();
                    console.error('下载失败: ', error);
                    uni.showToast({ title: '下载失败', icon: 'none' });
                    reject(error);
                }
            });
        });
    }


    async function initDownload(url) {
        console.log('url下载', url)
        try {
            // 1. 检查安装权限
            const hasPermission = await checkInstallPermission();

            console.log('权限', hasPermission)

            if (!hasPermission) {
                // 2. 如果没有权限，请求权限
                uni.showModal({
                    title: '权限申请',
                    content: '需要您允许应用安装权限，以便完成版本更新。',
                    confirmText: '去设置',
                    success: async (res) => {
                        if (res.confirm) {
                            const permissionGranted = await requestInstallPermission();
                            if (permissionGranted) {
                                // 3. 权限获取成功，开始下载安装
                                await downloadAndInstallApk(url);
                            } else {
                                uni.showToast({ title: '权限获取失败', icon: 'none' });
                            }
                        }
                    }
                });
            } else {
                // 已经有权限，直接下载安装
                await downloadAndInstallApk(url);
            }
        } catch (error) {
            console.error('更新流程出错: ', error);
            uni.showToast({ title: '更新失败', icon: 'none' });
        }
    }

    return {
        requestInstallPermission,
        initDownload,
        progress
    }
}