function getQueryString(name) {
    const url_string = window.location.href;
    const url = new URL(url_string);
    return url.searchParams.get(name);
}

function getOpenUid() {
    const key = 'fis_open_uid';
    let uid = localStorage[key];
    if (!uid) {
        uid = generateUUID();
        localStorage[key] = uid;
    }
    return uid;
}

function generateUUID() {
    if (typeof crypto === 'object') {
        if (typeof crypto.randomUUID === 'function') {
            return crypto.randomUUID();
        }
        if (typeof crypto.getRandomValues === 'function' && typeof Uint8Array === 'function') {
            const callback = (c) => {
                const num = Number(c);
                return (num ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (num / 4)))).toString(16);
            };
            return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, callback);
        }
    }
    let timestamp = new Date().getTime();
    let perforNow = (typeof performance !== 'undefined' && performance.now && performance.now() * 1000) || 0;
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
        let random = Math.random() * 16;
        if (timestamp > 0) {
            random = (timestamp + random) % 16 | 0;
            timestamp = Math.floor(timestamp / 16);
        } else {
            random = (perforNow + random) % 16 | 0;
            perforNow = Math.floor(perforNow / 16);
        }
        return (c === 'x' ? random : (random & 0x3) | 0x8).toString(16);
    });
};

/**
 * 添加页面Resize回调
 * @param {Function} fn 回调函数
 */
function addResizeCallback(fn) {
    window.addEventListener('resize', fn);
}

/**
 * 加载提示器
 * @param {string|HTMLDivElement} el 寄生元素
 */
function Loading(el) {
    /**
     * 显示
     */
    this.show = function () {
        var loadingEl = $('<div class="loading"><div></div></div>');
        $(el).append(loadingEl);
    }
    /**
     * 隐藏
     */
    this.hide = function () {
        $(el).find('.loading').remove()
    }
}

/**
 * 将小驼峰JSON转成大驼峰
 * @param {string} jsonStr 源JSON字符串
 * @returns 大驼峰风格的JSON字符串
 */
function toUpperCamelCase(jsonStr) {
    const regex = /"[a-z]+\w*":/g;
    let result = jsonStr.replace(regex, (match) => {
        const key = match.slice(1, -2);
        const firstChar = key.charAt(0).toUpperCase();
        const restChars = key.slice(1);
        return `"${firstChar}${restChars}":`;
    });
    return result;
}