/*
 * @Author: weisheng
 * @Date: 2023-04-23 13:19:59
 * @LastEditTime: 2023-04-27 12:45:37
 * @LastEditors: weisheng
 * @Description:url工具
 * @FilePath: \uni-mini-router\src\utils\index.ts
 * 记得注释
 */
/**
 * 获取url中的参数
 * @param path 完整路径
 * @returns
 */
export function getUrlParams(path: string) {
  const params: Record<string, string> = {}
  const pathArray: string[] = path.split('?') // 路径根据?拆分为2部分
  let paramString: string = '' // 参数字符串
  let paramArrary: string[] = [] // 参数数组
  if (pathArray.length > 1) {
    paramString = pathArray[1]
  }
  paramArrary = paramString.split('&')
  for (let index = 0; index < paramArrary.length; index++) {
    if (paramArrary[index].split('=').length === 2) {
      params[paramArrary[index].split('=')[0]] = paramArrary[index].split('=')[1]
    }
  }
  return params
}

/**
 * 设置参数
 * @param path 路径(无参数)
 * @param params (参数)
 * @returns
 */
export function setUrlParams(path: string, params: Record<string, string>) {
  for (const key in params) {
    if (path.indexOf('?') > -1) {
      path = path + `&${key}=${params[key]}`
    } else {
      path = path + `?${key}=${params[key]}`
    }
  }
  return path
}

/**
 * 全量替换url中的字符
 * @param str 原始字符串
 * @param find 要查找的字符串
 * @param replace 要替换的字符串
 * @returns
 */
function replaceAll(str: string, find: string, replace: string) {
  return str.replace(new RegExp(find, 'g'), replace)
}

/**
 * 去除拼接url产生的多余的/
 * @param url 目标路径
 */
export function beautifyUrl(url: string) {
  url = replaceAll(url, '//', '/') // 先替换所有'//'为'/'
  url = replaceAll(url, 'https:/', 'https://') // 再将https补全'//'
  url = replaceAll(url, 'http:/', 'http://') // 再将http补全'//'
  return url
}
/**
 * url查询参数序列化
 * @param query url查询参数
 * @returns
 */
export function queryStringify(query: Record<string, string>) {
  const result: Record<string, string> = {}
  if (query) {
    for (const key in query) {
      let value: any = query[key]
      if (value === undefined) {
        value = ''
      }
      result[key] = value
    }
  }
  return result
}

/**
 * 判断query或params是否为空或者undefined
 * @param obj 待判断对象
 * @returns
 */
export function isEmptyObject(obj: undefined | null | Record<string, any>): boolean {
  return obj === undefined || obj === null || Object.keys(obj).length === 0
}