/*
 * @LastEditors: whitechiina 1293616053@qq.com
 * @LastEditTime: 2025-07-31 13:42:48
 */
/**
 * 获取URL参数工具函数
 * @param {string|array} keys - 要获取的参数名，可以是字符串或数组
 * @param {any} defaultValue - 当参数不存在时的默认值
 * @returns {any} 返回参数值或参数对象
 */

const getUrlParam = function(keys, defaultValue = undefined) {
    // 获取原始查询字符串（包含开头的'?'）
    let queryString = window.location.search;
    
    // 预处理：将第一个问号后的所有问号替换为'&'
    if (queryString.includes('?')) {
        // 移除开头的'?'，然后处理多个问号
        let queryWithoutQuestion = queryString.substring(1);
        // 将多个问号替换为&
        queryWithoutQuestion = queryWithoutQuestion.replace(/\?/g, '&');
        queryString = '?' + queryWithoutQuestion;
    }
    
    // 解析处理后的查询字符串
    const params = new URLSearchParams(queryString);
    
    // 1. 未传入keys：返回全部参数组成的对象
    if (!keys) {
        const result = {};
        for (const [key, value] of params.entries()) {
            result[key] = decodeURIComponent(value);
        }
        return result;
    }

    // 2. 传入数组：返回包含这些参数的对象
    if (Array.isArray(keys)) {
        return keys.reduce((result, key) => {
            result[key] = params.has(key) 
                ? decodeURIComponent(params.get(key)) 
                : defaultValue;
            return result;
        }, {});
    }

    // 3. 传入字符串：返回单个参数值
    if (typeof keys === 'string') {
        return params.has(keys) 
            ? decodeURIComponent(params.get(keys)) 
            : defaultValue;
    }

    // 4. 无效keys类型返回默认值
    return defaultValue;
}

export default getUrlParam;