using AxCopilot.Models;

namespace AxCopilot.Services.Agent.SlashCommands;

/// <summary>Phase 22: /compact — 대화 기록 요약으로 컨텍스트 절약.</summary>
public class CompactCommand : ISlashCommand
{
    public string Name => "compact";
    public string[] Aliases => Array.Empty<string>();
    public string Description => "대화 기록을 요약하여 컨텍스트 사용량을 줄입니다";
    public string? ArgumentHint => "[요약 지시사항]";
    public bool RequiresActiveSession => true;

    public async Task ExecuteAsync(string arguments, IAgentChatContext ctx, CancellationToken ct)
    {
        var instruction = string.IsNullOrWhiteSpace(arguments)
            ? "위 대화를 핵심 결정사항, 작업 파일, 남은 작업 중심으로 간결하게 요약하세요."
            : $"위 대화를 다음 지시에 따라 요약하세요: {arguments}";

        await ctx.SendSystemMessageAsync("[컴팩션 시작] 대화를 요약하고 있습니다...");

        try
        {
            var messages = new List<ChatMessage>
            {
                new() { Role = "user", Content = instruction }
            };
            var summary = await ctx.Llm.SendAsync(messages, ct);
            await ctx.SendSystemMessageAsync(
                $"[컴팩션 완료] 대화가 요약되었습니다.\n\n---\n{summary}\n---");
        }
        catch (Exception ex)
        {
            await ctx.SendSystemMessageAsync($"[컴팩션 실패] {ex.Message}");
        }
    }
}
