/**
 * AI 月度总结（plan.md「8.3 AI 月度总结」）。
 *
 * 参考 AutoAccounting 的 SummaryService：
 * - 计算月度统计数据（支出/收入/分类/商户）
 * - 构建结构化 prompt
 * - 调用 AI 生成总结报告
 *
 * 复用 domain/ai.ts 的 buildMonthlySummaryPrompt + annualReport 的统计函数。
 */

import { buildMonthlySummaryPrompt, type AiProvider } from '../domain/ai';
import { generateAnnualReport } from '../domain/stats/annualReport';
import { removeThink } from '../domain/ai';
import type { Transaction } from '../domain/core/types';

export interface MonthlyStats {
  year: number;
  month: number;
  totalExpense: string;
  totalIncome: string;
  transactionCount: number;
  topCategories: { category: string; amount: string }[];
}

export interface MonthlySummaryResult {
  stats: MonthlyStats;
  /** AI 生成的总结文本。 */
  summary: string;
}

/** 计算月度统计（纯函数）。 */
export function calculateMonthlyStats(
  transactions: Transaction[],
  year: number,
  month: number,
): MonthlyStats {
  const monthStr = `${year}-${String(month).padStart(2, '0')}`;
  const monthTx = transactions.filter(t => t.date.startsWith(monthStr));

  // 复用年度报告的统计逻辑（过滤到当月）
  const report = generateAnnualReport(monthTx, year);
  return {
    year,
    month,
    totalExpense: report.totalExpense,
    totalIncome: report.totalIncome,
    transactionCount: report.transactionCount,
    topCategories: report.topCategories.slice(0, 5).map(c => ({ category: c.category, amount: c.amount })),
  };
}

import { logger } from '../utils/logger';

/**
 * 生成 AI 月度总结。
 */
export async function generateMonthlySummary(
  transactions: Transaction[],
  year: number,
  month: number,
  provider: AiProvider,
): Promise<MonthlySummaryResult> {
  logger.info('aiSummary', `开始生成 AI 月度财务总结 [${year}年${month}月]`);
  try {
    const stats = calculateMonthlyStats(transactions, year, month);

    const messages = buildMonthlySummaryPrompt({
      totalExpense: stats.totalExpense,
      totalIncome: stats.totalIncome,
      transactionCount: stats.transactionCount,
      topCategories: stats.topCategories,
    });

    const response = await provider.chat(messages);
    logger.info('aiSummary', `AI 月度财务总结生成成功 [${year}年${month}月]`);
    return {
      stats,
      summary: removeThink(response),
    };
  } catch (e) {
    logger.error('aiSummary', `生成 AI 月度总结失败 [${year}年${month}月]`, e);
    throw e;
  }
}

/** 无 AI 的纯文本总结（降级，不调 AI）。 */
export function generatePlainTextSummary(stats: MonthlyStats): string {
  const lines: string[] = [];
  lines.push(`${stats.year}年${stats.month}月财务总结`);
  lines.push('');
  lines.push(`总收入：${stats.totalIncome} 元`);
  lines.push(`总支出：${stats.totalExpense} 元`);
  lines.push(`交易笔数：${stats.transactionCount}`);
  lines.push('');
  if (stats.topCategories.length > 0) {
    lines.push('主要支出分类：');
    for (const cat of stats.topCategories) {
      lines.push(`   ${cat.category}: ${cat.amount} 元`);
    }
  }
  return lines.join('\n');
}
