using System.Text;

namespace AxCopilot.Services.Agent.SlashCommands;

/// <summary>Phase 22: /help — 사용 가능한 명령 목록 표시.</summary>
public class HelpCommand : ISlashCommand
{
    public string Name => "help";
    public string[] Aliases => Array.Empty<string>();
    public string Description => "사용 가능한 명령 목록을 표시합니다";
    public string? ArgumentHint => null;
    public bool RequiresActiveSession => false;

    public async Task ExecuteAsync(string arguments, IAgentChatContext ctx, CancellationToken ct)
    {
        var sb = new StringBuilder("## AX Agent 명령\n\n");

        // 내장 슬래시 명령
        sb.AppendLine("### 내장 명령");
        foreach (var cmd in ctx.CommandRegistry.GetAll().OrderBy(c => c.Name))
        {
            var hint = cmd.ArgumentHint != null ? $" `{cmd.ArgumentHint}`" : "";
            var aliases = cmd.Aliases.Length > 0
                ? $" (별칭: {string.Join(", ", cmd.Aliases.Select(a => $"/{a}"))})" : "";
            sb.AppendLine($"- **/{cmd.Name}**{hint} — {cmd.Description}{aliases}");
        }

        // 스킬 수 요약
        var skillCount = ctx.LoadedSkills.Count;
        if (skillCount > 0)
            sb.AppendLine($"\n### 스킬 ({skillCount}개)\n`/skills`로 전체 목록을 확인하세요.");

        await ctx.SendSystemMessageAsync(sb.ToString());
    }
}
