using System.Text;

namespace AxCopilot.Services.Agent.SlashCommands;

/// <summary>Phase 22: /model — 세션 모델 전환.</summary>
public class ModelCommand : ISlashCommand
{
    public string Name => "model";
    public string[] Aliases => Array.Empty<string>();
    public string Description => "현재 세션의 AI 모델을 변경합니다";
    public string? ArgumentHint => "[모델명]";
    public bool RequiresActiveSession => false;

    public async Task ExecuteAsync(string arguments, IAgentChatContext ctx, CancellationToken ct)
    {
        var llm = ctx.Settings.Settings.Llm;

        if (string.IsNullOrWhiteSpace(arguments))
        {
            // 현재 모델 + 사용 가능 목록 표시
            var sb = new StringBuilder();
            sb.AppendLine($"현재 모델: **{llm.Model}**");
            sb.AppendLine($"서비스: **{llm.Service}**");

            if (llm.FallbackModels?.Count > 0)
            {
                sb.AppendLine("\n사용 가능한 폴백 모델:");
                foreach (var fb in llm.FallbackModels)
                    sb.AppendLine($"- {fb}");
            }

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

        // 모델 변경
        var newModel = arguments.Trim();
        llm.Model = newModel;
        ctx.Settings.Save();
        ctx.UpdateSessionHeader();

        await ctx.SendSystemMessageAsync($"모델이 **{newModel}**(으)로 변경되었습니다.");
    }
}
