// ==UserScript==
// @name        导出所有书签,搭配 1.0.19 版本及以后使用
// @namespace   https://github.com/dlzmoe/linuxdo-scripts
// @match       https://linux.do/*
// @grant       none
// @version     1.2
// @author      dlzmoe
// ==/UserScript==
(function () {
  'use strict';
  const myusernameStr = $('.d-header-icons .icon img.avatar').attr('src');
  // 使用 indexOf 和 substring 方法提取用户名
  const start = myusernameStr.indexOf('/user_avatar/linux.do/') + '/user_avatar/linux.do/'.length;
  const end = myusernameStr.indexOf('/', start);
  const myusername = myusernameStr.substring(start, end);

  const categoryMap = {
    4: "开发调优",
    14: "资源荟萃",
    42: "文档共建",
    10: "跳蚤市场",
    27: "非我莫属",
    32: "读书成诗",
    46: "扬帆起航",
    34: "前沿快讯",
    36: "福利羊毛",
    11: "搞七捻三",
    2: "运营反馈",
    45: "深海幽域"
  };

  setTimeout(async () => {
    try {
      let allBookmarks = [];
      let page = 0;
      let hasMore = true;

      while (hasMore) {
        const response = await fetch(`https://linux.do/u/${myusername}/bookmarks.json?page=${page}`, {
          headers: {
            'Accept': 'application/json',
            'X-Requested-With': 'XMLHttpRequest',
            'User-Agent': navigator.userAgent,
            'Referer': `https://linux.do/u/${myusername}/bookmarks`,
            'Origin': 'https://linux.do'
          },
          credentials: 'include'
        });

        if (!response.ok) {
          throw new Error(`HTTP error! status: ${response.status}`);
        }

        const data = await response.json();

        if (!data.user_bookmark_list?.bookmarks?.length) {
          hasMore = false;
        } else {
          allBookmarks = allBookmarks.concat(data.user_bookmark_list.bookmarks);
          page++;
          // 添加延迟避免请求过快
          await new Promise(resolve => setTimeout(resolve, 500));
        }
      }

      let formattedData = [{
        id: 0,
        name: "默认",
        list: allBookmarks.map(item => ({
          cate: categoryMap[item.category_id] || "未分类",
          tags: item.tags,
          title: item.title,
          url: `https://linux.do/t/topic/${item.topic_id}`
        }))
      }];

      alert(`成功导出 ${allBookmarks.length} 个书签,请前往扩展收藏夹手动导入下载的 json 文件!`);

      const blob = new Blob([JSON.stringify(formattedData, null, 2)], {
        type: 'application/json'
      });
      const url = URL.createObjectURL(blob);
      const link = document.createElement('a');
      link.href = url;
      link.download = `${myusername}-bookmarks.json`;
      document.body.appendChild(link);
      link.click();
      URL.revokeObjectURL(url);
      document.body.removeChild(link);
    } catch (error) {
      console.error('导出书签时发生错误:', error);
      alert('导出书签失败,请检查控制台查看错误信息。');
    }
  }, 100);
})();