using System.Text;

namespace AxCopilot.Services.Agent.SlashCommands;

/// <summary>Phase 22: /skills — 사용 가능한 스킬 목록 표시.</summary>
public class SkillsCommand : ISlashCommand
{
    public string Name => "skills";
    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 skills = ctx.LoadedSkills;
        if (skills.Count == 0)
        {
            await ctx.SendSystemMessageAsync(
                "등록된 스킬이 없습니다.\n\n스킬 폴더: `%APPDATA%\\AxCopilot\\skills\\`");
            return;
        }

        var sb = new StringBuilder("## 사용 가능한 스킬\n");
        foreach (var skill in skills.OrderBy(s => s.Name))
        {
            var avail = skill.IsAvailable ? "" : " ⚠️ (런타임 미충족)";
            var tab = !string.IsNullOrEmpty(skill.Tabs) && skill.Tabs != "all" ? $" [{skill.Tabs}]" : "";
            sb.AppendLine($"- **/{skill.Name}**{tab} — {skill.Description}{avail}");
        }

        sb.AppendLine($"\n총 {skills.Count}개 스킬 로드됨");
        await ctx.SendSystemMessageAsync(sb.ToString());
    }
}
