const util = {
  /**
   * 格式化日期时间
   * 将传入的Date对象格式化为"YYYY/MM/DD HH:MM:SS"的字符串形式。
   * @param {Date} date - 要格式化的日期对象
   * @returns {String} - 格式化后的日期时间字符串
   */
  formatTime: date => {
    const year = date.getFullYear() // 获取年份
    const month = date.getMonth() + 1 // 获取月份（注意：getMonth()返回的是0-11，所以需要加1）
    const day = date.getDate() // 获取日期
    const hour = date.getHours() // 获取小时
    const minute = date.getMinutes() // 获取分钟
    const second = date.getSeconds() // 获取秒

    // 使用formatNumber方法确保所有时间部分都是两位数，并用'/'连接日期部分，':'连接时间部分
    return [year, month, day].map(util.formatNumber).join('/') + ' ' + [hour, minute, second].map(util.formatNumber).join(':')
  },

  /**
   * 格式化数字
   * 确保传入的数字是两位数，如果不是，则在前面补零。
   * @param {Number|String} n - 需要格式化的数字
   * @returns {String} - 格式化后的两位数字符串
   */
  formatNumber: n => {
    n = n.toString() // 将数字转换为字符串
    return n[1] ? n : '0' + n // 如果长度大于1则直接返回，否则在前面补零
  },

  /**
   * 格式化HTML内容
   * 对传入的HTML字符串进行样式调整，以适应移动端显示，特别是处理图片、表格等内容的宽度和布局。
   * @param {String} content - 需要格式化的HTML字符串
   * @returns {String} - 格式化后的HTML字符串
   */
  formatHtml: content => {
    if (!content) {
      return // 如果没有内容，直接返回
    }

    // 替换<p>标签，设置最大宽度、单词换行等样式
    content = content.replace(/<p/gi, '<p style="max-width:100% !important;word-wrap:break-word;word-break:break-word;" ')

    // 替换<img>标签，设置最大宽度、高度自适应、边距等样式
    content = content.replace(/<img/gi, '<img style="max-width:100% !important;height:auto !important;margin:0;display:flex;" ')

    // 替换<style>标签中的样式，确保内部样式不会覆盖外部样式
    content = content.replace(/style="/gi, 'style="max-width:100% !important;table-layout:fixed;word-wrap:break-word;word-break:break-word;')

    // 替换<table>标签，设置表格布局和单词换行等样式
    content = content.replace(/<table/gi, '<table style="table-layout:fixed;word-wrap:break-word;word-break:break-word;" ')

    // 替换<td>标签，设置单元格间距、填充、边框等样式
    content = content.replace(/<td/gi, '<td cellspacing="0" cellpadding="0" style="border-width:1px; border-style:solid; border-color:#666; margin: 0px; padding: 0px;"')

    // 移除width和height属性，防止图片和表格固定宽度或高度
    content = content.replace(/width=/gi, 'sss=')
    content = content.replace(/height=/gi, 'sss=')

    // 确保自闭合标签如<img>有正确的样式
    content = content.replace(/\/>/gi, ' style="max-width:100% !important;height:auto !important;margin:0;display:block;" />')

    return content // 返回格式化后的HTML字符串
  }
}

export default util
  /**
   * 移除购物车Tabbar的数字
   */
  removeTabBadge: () => {
    uni.removeTabBarBadge({
      index: 3
    })
  },
  /**
   * 获取链接上的参数
   */
  getUrlKey: (name) => {
    return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) || ['', ''])[1]
      .replace(/\+/g, '%20')) || null
  },
  /**
   * 文件地址校验
   * @param fileUrl 获取到的文件路径
   */
  checkFileUrl: (fileUrl) => {
    // 防止 fileUrl 为null时 indexOf() 方法失效报错
    const url = fileUrl || ''
    const baseUrl = import.meta.env.VITE_APP_RESOURCES_URL
    // 判断 fileUrl 中是否已存在基础路径
    const check = url.indexOf(baseUrl) !== -1
    if (check || !fileUrl) {
      return url
    } else {
      return baseUrl + url
    }
  }
}

export default util
