/**
 * ============================================================
 * cli.ts — 命令行入口（从本地 CSV 文件运行完整管道）
 * ============================================================
 * 用法：
 *   pnpm exec tsx automation/cli.ts <csv路径> [--append]
 *   pnpm exec tsx automation/cli.ts "原表 .csv" --append
 * 
 * 参数：
 *   第1个参数  — CSV 文件路径（必需）
 *   --append  — 追加模式（默认），遇到重复 material_id 时跳过
 *   --replace — 替换模式，遇到重复 material_id 时先删旧数据
 * ============================================================
 */

import "dotenv/config"; // 加载 .env 环境变量
import { readFileSync } from "node:fs";
import path from "node:path";
import { processCsvBuffer } from "./pipeline.ts";

async function main() {
  // 解析命令行参数
  const args = process.argv.slice(2);
  const csvPath = args.find((a) => !a.startsWith("--"));
  const isReplace = args.includes("--replace");
  const batchIdArg = args.find((a) => a.startsWith("--batch-id="));
  const batchId = batchIdArg ? batchIdArg.split("=")[1] ?? "" : "";

  if (!csvPath) {
    console.error("用法: pnpm exec tsx automation/cli.ts <csv路径> [--append|--replace] [--batch-id=<批次ID>]");
    console.error("示例: pnpm exec tsx automation/cli.ts \"原表 .csv\" --batch-id=batch_20240101");
    process.exit(1);
  }

  // 读取 CSV 文件
  const resolvedPath = path.resolve(csvPath);
  console.log(`[cli] 读取 CSV: ${resolvedPath}`);
  console.log(`[cli] 批次 ID: ${batchId || "(未指定)"}`);
  const buffer = readFileSync(resolvedPath);

  // 执行完整管道
  const result = await processCsvBuffer(buffer, { append: !isReplace, batchId });

  // 输出结果摘要
  console.log("\n════════════════════ 结果摘要 ════════════════════");
  console.log(`  成功: ${result.success ? "✅" : "❌"}`);
  console.log(`  批次 ID: ${batchId || "(未指定)"}`);  console.log(`  CSV 总行数: ${result.totalRows}`);
  console.log(`  关键词输入生成: ${result.keywordInputRowsGenerated} 行`);
  console.log(`  搜索计划生成: ${result.searchPlanRowsGenerated} 行`);
  if (result.errors.length > 0) {
    console.log(`  错误: ${result.errors.join("; ")}`);
  }
  console.log("══════════════════════════════════════════════════\n");

  process.exit(result.success ? 0 : 1);
}

main().catch((err) => {
  console.error("[cli] 未捕获的错误:", err);
  process.exit(1);
});
