/*
 * @Author: Kane
 * @Date: 2023-02-28 19:30:40
 * @LastEditors: Kane
 * @FilePath: /task_schedule/src/utils/api/url.ts
 * @Description: 对URL的操作
 *
 * Copyright (c) ${2022} by Kane, All Rights Reserved.
 */

type stringkey = Record<string, string>;

/**
 * 将url的参数拆分成对象
 * @param url 访问的url
 * @returns
 */
function getURLParams( url: string ): Record<string, string>
{
    const arr = url.split( "?" );
    const params = arr[1].split( "&" );
    const obj: stringkey = {};

    for ( let i = 0; i < params.length; i++ )
    {
        const param = params[i].split( "=" );

        obj[param[0]] = param[1];
    }

    return obj;
}

/**
 * 对URL中的参数进行拆分，拆分的参数名称和值作为一个对象属性的键值对。
 * @param url url字符串
 * @returns 返回包含url中参数作为key，值作为value的对象。
 */
function getParamsFromURL( url: string ): stringkey
{
    const indexOfQuestionMark: number = url.indexOf( "?" );
    const indexOfSharp: number = url.indexOf( "#" );
    const paramObj: stringkey = {};
    let paramString;

    // url中没有问号，说明没有参数
    if ( indexOfQuestionMark < 0 )
    {
        return paramObj;
    }

    // 检查是否有#号
    if ( indexOfSharp < 0 )
    {
    // 没有#号,可以直接截取参数字符串
        paramString = url.substring( indexOfQuestionMark );
    }
    else
    {
    // 有#号，截取?和#之间的字符串
        const end: number = indexOfQuestionMark < indexOfSharp ? indexOfSharp : url.length;

        paramString = url.substring( indexOfQuestionMark + 1, end );
    }

    // 拆分属性
    const paramArray: string[] = paramString.split( "&" );

    paramArray.forEach(( item ) =>
    {
        if ( item.length === 0 )
        {
            return;
        }

        const param = item.split( "=" );

        paramObj[param[0]] = param[1] ?? "";
    });

    return paramObj;
}

export { getURLParams, getParamsFromURL };
