// Node.js 22 has built-in fetch
// 使用飞书 Docx API 追加内容

const APP_ID = 'cli_a93eb0f160399cc5';
const APP_SECRET = 'dRzJKrJ46j2Y1DKneyC33dQUNmsLwHCj';
const DOC_ID = 'YerQd8GomoDWQ6xA1zTc31xfnwb';

// 表格内容 (Markdown 格式)
const TABLE_CONTENT = `| 日期 | 规格 | 数量 |
|------|------|------|
| 24 年 12 月 | 细和润 | 2 |
| 24 年 12 月 | 金细 | 1 |
| 24 年 12 月 | 红中支 | 3 |
| 25 年 | 细和润 | 2 |
| 25 年 | 双支 | 5 |

**总计**: 13`;

async function getTenantAccessToken() {
  const response = await fetch('https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      app_id: APP_ID,
      app_secret: APP_SECRET,
    }),
  });
  
  const data = await response.json();
  if (data.code !== 0) {
    throw new Error(`Failed to get access token: ${data.msg}`);
  }
  return data.tenant_access_token;
}

async function getDocumentBlocks(token, docId) {
  // 获取文档所有块
  const response = await fetch(`https://open.feishu.cn/open-apis/docx/v1/documents/${docId}/blocks?page_size=100`, {
    method: 'GET',
    headers: {
      'Authorization': `Bearer ${token}`,
    },
  });
  
  const data = await response.json();
  return { response, data };
}

async function appendTextBlock(token, docId, parentId, text) {
  // 添加文本块 - 使用正确的 API 端点
  // POST /open-apis/docx/v1/documents/{document_id}/blocks/{parent_block_id}/children
  const response = await fetch(`https://open.feishu.cn/open-apis/docx/v1/documents/${docId}/blocks/${parentId}/children`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${token}`,
    },
    body: JSON.stringify({
      blocks: [
        {
          block_type: 1, // text
          text: {
            elements: [
              {
                text_run: {
                  content: text,
                },
              },
            ],
          },
        },
      ],
    }),
  });
  
  const textResponse = await response.text();
  let data;
  try {
    data = JSON.parse(textResponse);
  } catch {
    console.log('原始响应:', textResponse);
    throw new Error('响应不是有效的 JSON');
  }
  return { response, data };
}

async function main() {
  try {
    console.log('正在获取访问令牌...');
    const token = await getTenantAccessToken();
    console.log('✓ 获取访问令牌成功');
    
    console.log('正在获取文档块...');
    const blocksInfo = await getDocumentBlocks(token, DOC_ID);
    if (!blocksInfo.response.ok) {
      console.error('✗ 获取文档块失败');
      console.error('状态码:', blocksInfo.response.status);
      console.error('错误:', JSON.stringify(blocksInfo.data, null, 2));
      return;
    }
    
    // 获取根块 ID (第一个块)
    const rootBlockId = blocksInfo.data.data?.items?.[0]?.block_id;
    if (!rootBlockId) {
      console.error('✗ 无法获取根块 ID');
      return;
    }
    console.log('根块 ID:', rootBlockId);
    
    console.log('正在追加内容到文档...');
    const result = await appendTextBlock(token, DOC_ID, rootBlockId, TABLE_CONTENT);
    
    if (result.response.ok) {
      console.log('✓ 文档更新成功!');
      console.log('响应:', JSON.stringify(result.data, null, 2));
    } else {
      console.error('✗ 文档更新失败');
      console.error('状态码:', result.response.status);
      console.error('错误:', JSON.stringify(result.data, null, 2));
    }
  } catch (error) {
    console.error('✗ 发生错误:', error.message);
    console.error(error.stack);
    process.exit(1);
  }
}

main();
