import { getToken } from '@/store/useCookieStore';
//获得nuxt.config中配置的域名

//const servUrl = 'http://apipre1.bjzxtw.org.cn:29501'; //pre
//const servUrl = 'http://apidev.bjzxtw.org.cn'; //dev
//const UserUrl = 'http://localhost:3000'; //用户来源

// requestData方法 如果只是单一请求，可以直接调用这个方法
function requestData(url, options = {}) {
    //获得全局变量中的webUrl和userUrl
    const { $webUrl, $userUrl,$CwebUrl } = useNuxtApp()
    let fullUrl = $webUrl + url;
   
    // 生成唯一的 key
    const key = `${url}-${JSON.stringify(options.query || options.body)}`;

    // 设置默认的请求头
    const headers = {
        'Content-Type': 'application/json',
        'Userurl': $CwebUrl,
        'token': getToken(),
        //'Origin': 'http://nwpre.bjzxtw.org.cn',//pre
        'Origin': $CwebUrl,
    };

    // 确定请求方法
    const method = options.method || 'GET';

    // 使用 useAsyncData 进行数据获取
    const { data, error } = useAsyncData(key, () => {
        return $fetch(fullUrl, {
            method,
            headers,
            body: method === 'POST' ? options.body : undefined, // 仅在 POST 请求时设置 body
            query: method === 'GET' ? options.query : undefined, // 仅在 GET 请求时设置 query
        });
    }, { lazy: true }); // 禁用缓存

    return { data, error };
}

// requestDataPromise 如果你的请求中的参数依赖上一个请求，使用这个方法
function requestDataPromise(url, options = {}) {
    return new Promise(async (resolve, reject) => {
        //获得全局变量中的webUrl和userUrl
        const { $webUrl, $userUrl , $CwebUrl } = useNuxtApp()
        let fullUrl = $webUrl + url;

        let key = `${url}-${JSON.stringify(options.query)}`;

        // console.log(555555555)
        // console.log(key)
        //let key =  "abc" 不能为固定值
        //let key = Math.random().toString(36).substring(2, 15); 不能为固定方法 都会留下缓存

        // 设置默认的请求头
        const headers = {
            'Content-Type': 'application/json',
            'Userurl': $CwebUrl,
            'token': getToken(),
            'Origin': $CwebUrl,
        };

        // 确定请求方法
        const method = options.method || 'GET';

        try {
            // 使用 useAsyncData 进行数据获取
            const { data, error } = await useAsyncData(key, () => {
                return $fetch(fullUrl, {
                    method,
                    headers,
                    body: method === 'POST' ? options.body : undefined, // 仅在 POST 请求时设置 body
                    query: method === 'GET' ? options.query : undefined, // 仅在 GET 请求时设置 query
                });
            }, { 
                lazy: false,
            }); 

            if (error.value) {
                reject(error.value); // 如果有错误，拒绝 Promise
            } else {
                resolve(data.value); // 如果成功，返回数据
            }
        } catch (err) {
            reject(err); // 捕获异常并拒绝 Promise
        }
    });
}

// requestDataWebUrl 请求非本网地址时 使用这个方法
function requestDataWebUrl(url, options = {}) {
    return new Promise(async (resolve, reject) => {
        //获得全局变量中的webUrl和userUrl
        const { $webUrl, $userUrl, $CwebUrl } = useNuxtApp()
        let fullUrl = `${url}`;

        // 生成唯一的 key
        const key = `${url}-${JSON.stringify(options.query || options.body)}`;

        // 设置默认的请求头
        const headers = {
            'Content-Type': 'application/json',
            'Userurl': $CwebUrl,
            'token': getToken(),
            'Origin': $CwebUrl,
        };

        // 确定请求方法
        const method = options.method || 'GET';

        try {
            // 使用 useAsyncData 进行数据获取
            const { data, error } = await useAsyncData(key, () => {
                return $fetch(fullUrl, {
                    method,
                    headers,
                    body: method === 'POST' ? options.body : undefined, // 仅在 POST 请求时设置 body
                    query: method === 'GET' ? options.query : undefined, // 仅在 GET 请求时设置 query
                });
            }, { lazy: true }); // 禁用缓存

            if (error.value) {
                reject(error.value); // 如果有错误，拒绝 Promise
            } else {
                resolve(data.value); // 如果成功，返回数据
            }
        } catch (err) {
            reject(err); // 捕获异常并拒绝 Promise
        }
    });
}


// 在首页执行缓存
function requestHome(url, options = {}) {
    return new Promise(async (resolve, reject) => {
        //获得全局变量中的webUrl和userUrl
        const { $webUrl, $userUrl,$CwebUrl } = useNuxtApp()
        let fullUrl = $webUrl + url;

        let key = `${url}-${JSON.stringify(options.query)}`;

        //let key =  "abc" 不能为固定值
        //let key = Math.random().toString(36).substring(2, 15); 不能为固定方法 都会留下缓存

        // 设置默认的请求头
        const headers = {
            'Content-Type': 'application/json',
            'Userurl': $CwebUrl,
            'token': getToken(),
            'Origin': $CwebUrl,
        };

        // 确定请求方法
        const method = options.method || 'GET';

        try {
            // 使用 useAsyncData 进行数据获取
            const { data, error } = await useAsyncData(key, () => {
                return $fetch(fullUrl, {
                    method,
                    headers,
                    body: method === 'POST' ? options.body : undefined, // 仅在 POST 请求时设置 body
                    query: method === 'GET' ? options.query : undefined, // 仅在 GET 请求时设置 query
                });
            }, { 
                lazy: true, //使用缓存
            }); 

            if (error.value) {
                reject(error.value); // 如果有错误，拒绝 Promise
            } else {
                resolve(data.value); // 如果成功，返回数据
            }
        } catch (err) {
            reject(err); // 捕获异常并拒绝 Promise
        }
    });
}

export { requestData, requestDataPromise ,requestDataWebUrl,requestHome };