/**
 * @name: useShare
 * @author: kahu4
 * @date: 2023-11-10 09:45
 * @description：useShare
 * @update: 2023-11-10 09:45
 * */
import { ref, unref } from "vue";
import { PARAMS_KEY, useRouter } from "@/hooks/useRouter";
import { VUE_SHARE_TITLE } from "@/config";

// 分享页面
export const SharePathMap = {
    GOODS_DETAIL:'/pages/goodsDetail/goodsDetail'
}

export function useShare(url='pages/share/index'){
    const shareInfo = ref({
        title: VUE_SHARE_TITLE,
        path: 'pages/share/index',
        imageUrl: ''
    })
    const shareUrl = ref(url)

    /**
     * 设置路径
     * @param packageParameter
     */
    const handleSetShareData = (packageParameter) => {
        //views/dynamic/detail/index
        shareInfo.value.path = `/pages/share/index?${packageParameter}`
    }

    const shareAppMessage = ()=>Promise.resolve({
        title: shareInfo.value.title,
        path: shareInfo.value.path,
        imageUrl: shareInfo.value.imageUrl
    })

    const shareTimeline = ()=>({
        title: shareInfo.value.title,
        path: shareInfo.value.path,
        imageUrl: shareInfo.value.imageUrl
    })

    /**
     * 封装参数
     * @param data
     */
    const packageParameter = (data)=>{
        const shareData = {
            url,
            data
        }
        shareData.url = shareUrl.value
        return `${PARAMS_KEY}=${encodeURIComponent(JSON.stringify(shareData))}`
    }

    /**
     * 默认分享
     */
    const defaultShare = ()=>{
        unref(shareInfo).title = VUE_SHARE_TITLE
        unref(shareInfo).imageUrl = ''
        handleSetShareData(packageParameter({
            url:'/pages/index/index',
            data:{}
        }))
    }

    /**
     * 商品分享
     * @param goods
     */
    const goodsDetailShare = (goods)=>{
        unref(shareInfo).title = goods.storeName
        unref(shareInfo).imageUrl = goods.image
        handleSetShareData(packageParameter({
            id:goods.id
        }))
    }

    return {
        shareUrl,
        shareInfo,
        handleSetShareData,
        shareAppMessage,
        shareTimeline,
        packageParameter,
        defaultShare,
        goodsDetailShare,
    }
}



export const useShareInner = () => {

    const {push, getParams, pushToTab} = useRouter()

    const params = ref({
        data: undefined, url: ""
    })

    /**
     * 处理share参数
     * @param options
     */
    async function analysisParams(options) {
        params.value = getParams(options);
        await analysisParameter()
    }

    /**
     * 解析参数
     */
    async function analysisParameter() {
        switch (unref(params).url) {
            case SharePathMap.GOODS_DETAIL:
                toSkip()
                break;
            default:
                pushToTab({url: '/pages/index/index'})
        }
    }


    /**
     * 跳转
     */
    function toSkip() {
        if (unref(params).url) {
            push({
                url: unref(params).url,
            }, {
                data: unref(params).data,
                type: 'redirectTo'
            })
        }
    }

    return {
        params,
        analysisParams
    }
}

