import { v4 as uuidv4 } from 'uuid'

/**
 * 解析浏览器书签 HTML 文件
 * @param {string} htmlText - HTML 文本内容
 * @returns {Array} 解析后的书签对象数组
 */
export function parseBookmarkHTML(htmlText) {
  if (!htmlText || typeof htmlText !== 'string') {
    throw new Error('无效的 HTML 内容')
  }

  const parser = new DOMParser()
  const doc = parser.parseFromString(htmlText, 'text/html')

  // 查找根 DL 元素
  const rootDL = doc.querySelector('DL')
  if (!rootDL) {
    throw new Error('未找到有效的书签数据，请确认这是浏览器导出的书签文件')
  }

  const bookmarks = []
  const folderStack = []

  /**
   * 递归遍历 DL 结构
   * @param {Element} dlElement - DL 元素
   */
  function traverseDL(dlElement) {
    if (!dlElement) return

    const children = Array.from(dlElement.children)

    for (const child of children) {
      if (child.tagName === 'DT') {
        const firstChild = child.firstElementChild

        if (firstChild?.tagName === 'A') {
          // 这是一个书签
          const link = firstChild
          const href = link.getAttribute('HREF')
          const title = link.textContent?.trim() || ''
          const addDate = link.getAttribute('ADD_DATE')
          const icon = link.getAttribute('ICON') || ''

          // 验证必需字段
          if (href && title) {
            const bookmark = {
              id: uuidv4(), // 临时 ID，用于表格选择
              title,
              url: href,
              icon: icon || '',
              addDate: addDate ? parseInt(addDate, 10) : null,
              folderPath: folderStack.length > 0 ? folderStack.join('/') : '',
              tags: [], // 初始为空，用户可在表格中编辑
              description: '', // 初始为空，用户可在表格中编辑
            }
            bookmarks.push(bookmark)
          }
        } else if (firstChild?.tagName === 'H3') {
          // 这是一个文件夹
          const folderName = firstChild.textContent?.trim() || ''
          if (folderName) {
            folderStack.push(folderName)

            // 查找嵌套的 DL
            const nestedDL = child.querySelector('DL')
            if (nestedDL) {
              traverseDL(nestedDL)
            }

            folderStack.pop()
          }
        }
      } else if (child.tagName === 'DL') {
        // 直接嵌套的 DL（某些浏览器格式）
        traverseDL(child)
      }
    }
  }

  traverseDL(rootDL)

  if (bookmarks.length === 0) {
    throw new Error('文件中没有找到有效的书签数据')
  }

  return bookmarks
}

