// fiveshare.ts
import api from "../api/api";
import { shareURL } from "@/environments/environment";

let userInfo = { name: '' };
if (uni.getStorageSync('cffp_userInfo')) {
    userInfo = JSON.parse(uni.getStorageSync('cffp_userInfo'));
}

// ===== 环境判断工具 =====
function isWechatBrowser(): boolean {
    return /micromessenger/i.test(navigator.userAgent);
}

function isMiniProgramWebView(): boolean {
    // 检查微信环境变量
    if (typeof window.__wxjs_environment !== 'undefined' && window.__wxjs_environment === 'miniprogram') {
        return true;
    }
    // 检查 URL 参数
    if (window.location.search.indexOf('from=miniprogram') > -1 || 
        window.location.hash.indexOf('from=miniprogram') > -1) {
        return true;
    }
    return false;
}

// ===== 确保微信 SDK 已加载 =====
function ensureWechatSDK(): Promise<void> {
    return new Promise((resolve, reject) => {
        // 如果已经有 jWeixin 且不是占位对象
        // @ts-ignore
        if (window.jWeixin && window.jWeixin.config !== function() { console.warn('[占位] wx.config'); }) {
            resolve();
            return;
        }
        
        // 如果已经有 wx（原生对象）
        // @ts-ignore
        if (typeof wx !== 'undefined' && wx.config) {
            // @ts-ignore
            window.jWeixin = wx;
            resolve();
            return;
        }
        
        // 动态加载微信 SDK
        const script = document.createElement('script');
        script.src = 'https://res2.wx.qq.com/open/js/jweixin-1.6.0.js';
        script.onload = function() {
            // @ts-ignore
            if (typeof wx !== 'undefined') {
                // @ts-ignore
                window.jWeixin = wx;
                console.log('✅ 微信 SDK 动态加载成功');
                resolve();
            } else {
                reject(new Error('微信 SDK 加载失败'));
            }
        };
        script.onerror = function() {
            reject(new Error('微信 SDK CDN 加载失败'));
        };
        document.head.appendChild(script);
    });
}

// ===== 初始化微信 SDK =====
export function initJssdkShare(callback: any, url: string) {
    // 只在微信浏览器且非小程序环境中初始化
    if (!isWechatBrowser() || isMiniProgramWebView()) {
        console.log('当前环境不需要初始化微信 SDK:', 
            isWechatBrowser() ? '微信浏览器' : '非微信浏览器',
            isMiniProgramWebView() ? '小程序 WebView' : '普通环境'
        );
        if (callback) callback();
        return;
    }

    console.log('🔄 开始初始化微信 SDK...');
    
    ensureWechatSDK().then(() => {
        // @ts-ignore
        const wx = window.jWeixin || window.wx;
        if (!wx) {
            console.error('❌ 无法获取微信 SDK');
            if (callback) callback();
            return;
        }

        const WxConfigRequestVO = {
            url: url || window.location.href.split('#')[0],
            systemType: uni.getStorageSync('addSystemType') || '1'
        };

        api.Wxshare(WxConfigRequestVO).then(res => {
            wx.config({
                debug: false,
                appId: res.data.appId,
                timestamp: res.data.timestamp,
                nonceStr: res.data.nonceStr,
                signature: res.data.signature,
                jsApiList: ['updateAppMessageShareData', 'updateTimelineShareData', 'onMenuShareAppMessage']
            });

            wx.ready(() => {
                console.log('✅ 微信 SDK 初始化完成');
                if (callback) callback();
            });

            wx.error((err: any) => {
                console.error('❌ 微信 SDK 初始化失败', err);
                if (callback) callback();
            });
        }).catch(err => {
            console.error('❌ 获取微信签名失败', err);
            if (callback) callback();
        });
    }).catch(err => {
        console.error('❌ 微信 SDK 加载失败', err);
        if (callback) callback();
    });
}

// ===== 获取分享数据 =====
function getShareData(data?: any) {
    if (data) return data;
    const currentUrl = `${shareURL}/pages/index/index`;
    return {
        title: '成为银盾合伙人，分享商品赚不停',
        desc: '资源+伙伴，共赢未来！',
        link: currentUrl,
        imgUrl: `${shareURL}/static/images/shareBg.png`
    };
}

// ===== 设置微信分享（主入口） =====
export function setWechatShare(data: any) {
    console.log('📤 setWechatShare 被调用', data);
    
    // 在小程序环境中，不执行微信分享
    if (isMiniProgramWebView()) {
        console.log('📱 小程序环境，跳过微信分享设置');
        return;
    }

    // 在微信浏览器中执行
    if (isWechatBrowser()) {
        const shareData = getShareData(data);
        
        // 确保 SDK 已加载
        ensureWechatSDK().then(() => {
            // @ts-ignore
            const wx = window.jWeixin || window.wx;
            if (!wx) {
                console.error('❌ 微信 SDK 不可用');
                return;
            }

            wx.ready(() => {
                wx.updateAppMessageShareData({
                    title: shareData.title,
                    desc: shareData.desc,
                    link: shareData.link,
                    imgUrl: shareData.imgUrl,
                    success: () => console.log('✅ 好友分享设置成功'),
                    fail: (err: any) => console.error('❌ 好友分享设置失败', err)
                });
                
                wx.updateTimelineShareData({
                    title: shareData.title,
                    link: shareData.link,
                    imgUrl: shareData.imgUrl,
                    success: () => console.log('✅ 朋友圈分享设置成功'),
                    fail: (err: any) => console.error('❌ 朋友圈分享设置失败', err)
                });
                
                wx.onMenuShareAppMessage({
                    title: shareData.title,
                    desc: shareData.desc,
                    link: shareData.link,
                    imgUrl: shareData.imgUrl,
                    success: () => console.log('✅ 旧版分享设置成功')
                });
            });
        }).catch(err => {
            console.error('❌ SDK 加载失败，无法设置分享', err);
        });
    } else {
        console.log('🌐 非微信环境，跳过微信分享设置');
    }
}

// ===== hshare 主入口 =====
export function hshare(data: any, url: string) {
    console.log('📤 hshare 被调用', data, url);
    
    // 如果在非微信浏览器中，提示用户复制链接
    if (!isWechatBrowser() || isMiniProgramWebView()) {
        const shareData = getShareData(data);
        // 降级方案：复制链接
        fallbackShare(shareData);
        return;
    }
    
    // 微信浏览器中执行分享
    initJssdkShare(() => {
        setWechatShare(data);
    }, url);
}

// ===== 降级方案 =====
function fallbackShare(data: any) {
    console.log('📋 降级方案：复制链接', data.link);
    try {
        // @ts-ignore
        if (typeof uni !== 'undefined' && uni.setClipboardData) {
            // @ts-ignore
            uni.setClipboardData({
                data: data.link,
                success: () => {
                    // @ts-ignore
                    uni.showToast({
                        title: '链接已复制，请分享给好友',
                        icon: 'none'
                    });
                }
            });
        } else if (navigator.clipboard) {
            navigator.clipboard.writeText(data.link).then(() => {
                alert('链接已复制，请分享给好友');
            }).catch(() => {
                alert('请复制链接: ' + data.link);
            });
        } else {
            alert('请复制链接: ' + data.link);
        }
    } catch (e) {
        alert('请复制链接: ' + data.link);
    }
}

// ===== 兼容旧方法 =====
export function setWechatShareDirectly(data: any) {
    hshare(data, window.location.href);
}