/**
 * 登录帮助工具类
 * 用于根据平台类型跳转到对应的登录页面
 */

import useUserStore from '@/stores/useUserStore';

/**
 * 检查当前平台类型
 * @returns {string} 平台类型：'mp-weixin' | 'h5' | 'app'
 */
export function getPlatformType() {
    // #ifdef MP-WEIXIN
    return 'mp-weixin';
    // #endif
    
    // #ifdef H5
    return 'h5';
    // #endif
    
    // #ifdef APP-PLUS
    return 'app';
    // #endif
    
    return 'h5'; // 默认返回H5
}

/**
 * 跳转到对应平台的登录页面
 * @param {Object} options 跳转选项
 * @param {string} options.redirectUrl 登录成功后跳转的URL
 * @param {string} options.loginType 登录类型：'wechat' | 'account' | 'idCard'
 */
export function navigateToLoginPage(options = {}) {
    const { redirectUrl, loginType = 'account' } = options;
    const platform = getPlatformType();
    
    let loginPage = '';
    let params = {};
    
    if (redirectUrl) {
        params.redirectUrl = redirectUrl;
    }
    
    switch (platform) {
        case 'mp-weixin':
            // 小程序端使用微信授权登录，直接显示微信授权弹窗
            uni.$emit('showLoginModal', { loginType: 'wechat' });
            return;
            
        case 'h5':
            if (loginType === 'idCard') {
                // H5端身份证号码登录
                loginPage = '/pages/login/id-card-login';
            } else {
                // H5端账号密码登录
                loginPage = '/pages/login/h5-login';
            }
            break;
            
        case 'app':
            // App端使用微信授权登录
            uni.$emit('showLoginModal', { loginType: 'wechat' });
            return;
            
        default:
            loginPage = '/pages/login/h5-login';
    }
    
    if (loginPage) {
        const queryString = Object.keys(params).length > 0 
            ? `?${new URLSearchParams(params).toString()}`
            : '';
            
        const finalUrl = `${loginPage}${queryString}`;
        const pages = getCurrentPages();
        
        if (pages.length >= 10) {
            // 页面栈已满，使用redirectTo替代
            uni.redirectTo({
                url: finalUrl,
                fail: (err) => {
                    console.error('页面跳转失败:', err);
                }
            });
        } else {
            uni.navigateTo({
                url: finalUrl,
                fail: (err) => {
                    console.error('页面跳转失败:', err);
                    // 失败后尝试redirectTo
                    uni.redirectTo({
                        url: finalUrl,
                        fail: (err2) => {
                            console.error('redirectTo也失败:', err2);
                        }
                    });
                }
            });
        }
    }
}

/**
 * 检查登录状态，如果未登录则跳转到对应登录页面
 * @param {Object} options 选项
 * @param {string} options.redirectUrl 登录成功后跳转的URL
 * @param {string} options.loginType 登录类型
 * @returns {boolean} 是否已登录
 */
export function checkLoginAndNavigate(options = {}) {
    const userStore = useUserStore();
    
    if (userStore.hasLogin) {
        return true;
    }
    
    // 未登录，跳转到对应登录页面
    navigateToLoginPage(options);
    return false;
}

/**
 * 处理身份证号码登录的URL参数
 * @param {string} url 包含参数的URL
 * @returns {Object} 解析后的参数对象
 */
export function parseIdCardLoginParams(url) {
    const urlObj = new URL(url, window.location.origin);
    const params = {};
    
    // 获取身份证号码base64参数
    const idCard = urlObj.searchParams.get('idCard');
    if (idCard) {
        params.idCard = idCard;
    }
    
    // 获取重定向URL
    const redirectUrl = urlObj.searchParams.get('redirectUrl');
    if (redirectUrl) {
        params.redirectUrl = redirectUrl;
    }
    
    return params;
}

/**
 * Base64解码身份证号码
 * @param {string} base64Str base64编码的字符串
 * @returns {string} 解码后的身份证号码
 */
export function decodeIdCardBase64(base64Str) {
    try {
        // #ifdef H5
        return atob(base64Str);
        // #endif
        
        // #ifdef MP-WEIXIN
        const result = uni.base64ToArrayBuffer(base64Str);
        return String.fromCharCode.apply(null, new Uint8Array(result));
        // #endif
        
        // #ifdef APP-PLUS
        return plus.base64.decode(base64Str);
        // #endif
        
        // 默认使用H5方式
        return atob(base64Str);
    } catch (error) {
        console.error('Base64解码失败:', error);
        throw new Error('身份证号码解码失败');
    }
}

export default {
    getPlatformType,
    navigateToLoginPage,
    checkLoginAndNavigate,
    parseIdCardLoginParams,
    decodeIdCardBase64
};
