#!/usr/bin/env node
/**
 * Daily News Aggregator Runner
 * 1. 运行聚合脚本生成 news_aggregated.md
 * 2. 读取结果并发送到指定 QQ 号
 * 3. 记录日志
 */

import { exec } from 'child_process';
import { promises as fs } from 'fs';
import path from 'path';

const AGGREGATOR_PATH = path.resolve('index.js');
const OUTPUT_PATH = path.resolve('news_aggregated.md');
const LOG_PATH = path.resolve('daily_news_run.log');

// QQ 消息发送：通过 OpenClaw 的 message 指令，或直接写入会话上下文
// 这里我们采用生成文件并在 log 中提示的方式，具体发送由 OpenClaw 路由。
// 如果环境允许，可以用系统命令调用 openclaw CLI send。
function appendLog(msg) {
  const time = new Date().toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' });
  const line = `[${time}] ${msg}\n`;
  fs.appendFile(LOG_PATH, line, { encoding: 'utf8' }).catch(console.error);
  console.log(line.trim());
}

async function run() {
  try {
    appendLog('开始运行新闻聚合...');

    // 1) 运行聚合脚本
    const aggregator = await import('file://' + AGGREGATOR_PATH);
    await aggregator.main(); // 假设 main 导出
    appendLog('聚合完成，输出文件已生成。');

    // 2) 读取聚合内容
    const content = await fs.readFile(OUTPUT_PATH, 'utf8');

    // 3) 发送 QQ 消息（这里生成一个 preparatory markdown 文件，后续由外部发送）
    const sendPath = path.resolve('to_qq_message.md');
    await fs.writeFile(sendPath, content, 'utf8');
    appendLog(`消息已就绪：${sendPath}`);

    // 4) 如果配置了 openclaw CLI，可以尝试直接发送
    // 例如: openclaw message send --channel qqbot --to <target> --file sendPath
    // 由于目标可能变化，这里仅记录，具体发送可由用户或外部定时器触发。

    appendLog('运行结束。');
    process.exit(0);
  } catch (err) {
    appendLog(`错误：${err && err.stack ? err.stack : String(err)}`);
    process.exit(1);
  }
}

run();
