package com.gzzm.lobster.context;

import com.gzzm.lobster.common.MessageRole;
import com.gzzm.lobster.llm.LobsterMessage;
import com.gzzm.lobster.llm.ModelRouteResult;
import com.gzzm.lobster.llm.ToolCall;
import com.gzzm.lobster.thread.ThreadRoom;
import net.cyan.arachne.annotation.Service;

import java.util.List;

/**
 * BulletSummarizer —— 兜底摘要器 / Bullet-point fallback summarizer.
 *
 * <p>不调任何 LLM，纯字符串拼接：列出 cutIndex 之前调用过哪些工具 + 总数统计。
 * 信息保真度低，但零成本、永不失败。LobsterConfig.summarizerEnabled=false 时默认走它；
 * LlmSummarizer 调用失败超时也会回退到这里。
 */
@Service
public class BulletSummarizer implements SummarizerService {

    @Override
    public String summarize(List<LobsterMessage> oldMessages, ThreadRoom thread, ModelRouteResult route) {
        StringBuilder summary = new StringBuilder("## 历史摘要（自动折叠）\n");
        int userCount = 0, assistantCount = 0, toolCount = 0;
        for (LobsterMessage m : oldMessages) {
            if (m.getRole() == MessageRole.user) {
                userCount++;
            } else if (m.getRole() == MessageRole.assistant) {
                assistantCount++;
                if (m.hasToolCalls()) {
                    for (ToolCall tc : m.getToolCalls()) {
                        summary.append("- 已调用工具 ").append(tc.getName()).append("\n");
                    }
                }
            } else if (m.getRole() == MessageRole.tool) {
                toolCount++;
            }
        }
        summary.append("（此前共 ").append(userCount).append(" 条用户输入，")
                .append(assistantCount).append(" 条 assistant 消息，")
                .append(toolCount).append(" 条工具结果已折叠）\n");
        return summary.toString();
    }
}
