/**
 * 复制文本到剪切板
 * @param {String} text - 复制的文本
 */
export function copyText(text = '') {
  if (navigator.clipboard) {
    // clipboard api 复制
    navigator.clipboard.writeText(text)
  } else {
    const textarea = document.createElement('textarea')
    document.body.appendChild(textarea)
    // 隐藏此输入框
    textarea.style.position = 'fixed'
    textarea.style.clip = 'rect(0 0 0 0)'
    textarea.style.top = '10px'
    // 赋值
    textarea.value = text
    // 选中
    textarea.select()
    // 复制
    document.execCommand('copy', true)
    // 移除输入框
    document.body.removeChild(textarea)
  }
}

/**
 * 递归过滤出所有 show 为 true 的节点，包括按钮
 * @param {Object} node - 菜单节点
 * @returns {Object|null} 过滤后的节点
 */
export function filterByShowTrue(node) {
  // 如果节点自身不显示，直接返回 null
  if (!node.show) {
    return null
  }

  // 创建结果对象的浅拷贝
  const result = { ...node }

  // 递归处理子节点
  if (result.children && Array.isArray(result.children)) {
    const filteredChildren = result.children
      .map((child) => filterByShowTrue(child))
      .filter((child) => child !== null)

    if (filteredChildren.length > 0) {
      result.children = filteredChildren
    } else {
      // 如果没有可见的子节点，删除 children 属性
      delete result.children
    }
  }

  // 过滤按钮
  if (result.btns && typeof result.btns === 'object') {
    const filteredBtns = {}
    let hasVisibleBtns = false

    Object.entries(result.btns).forEach(([key, btn]) => {
      // 只保留 show 为 true 的按钮
      if (btn.show === true) {
        filteredBtns[key] = { ...btn }
        hasVisibleBtns = true
      }
    })

    if (hasVisibleBtns) {
      result.btns = filteredBtns
    } else {
      // 如果没有可见的按钮，删除 btns 属性
      delete result.btns
    }
  }

  return result
}
