namespace AxCopilot.Services.Agent.Sdk;

/// <summary>
/// Phase 31-C: 커스텀 에이전트 정의 레지스트리.
/// SDK Initialize 요청 시 등록된 커스텀 에이전트를 관리합니다.
/// DelegateAgentTool에서 기본 에이전트 타입 외에 SDK 정의 에이전트도 사용 가능.
/// </summary>
public class AgentTypeRegistry
{
    private readonly Dictionary<string, CustomAgentDefinition> _agents = new(StringComparer.OrdinalIgnoreCase);

    /// <summary>커스텀 에이전트를 등록합니다.</summary>
    public void Register(CustomAgentDefinition agent)
    {
        if (string.IsNullOrWhiteSpace(agent.Name))
            throw new ArgumentException("에이전트 이름은 필수입니다.");
        _agents[agent.Name] = agent;
    }

    /// <summary>이름으로 커스텀 에이전트를 조회합니다.</summary>
    public CustomAgentDefinition? Get(string name)
        => _agents.TryGetValue(name, out var agent) ? agent : null;

    /// <summary>등록 여부를 확인합니다.</summary>
    public bool Contains(string name) => _agents.ContainsKey(name);

    /// <summary>등록된 모든 커스텀 에이전트를 반환합니다.</summary>
    public IReadOnlyCollection<CustomAgentDefinition> ListAll() => _agents.Values;

    /// <summary>커스텀 에이전트를 제거합니다.</summary>
    public bool Remove(string name) => _agents.Remove(name);

    /// <summary>모든 등록을 초기화합니다.</summary>
    public void Clear() => _agents.Clear();

    /// <summary>등록된 에이전트 수.</summary>
    public int Count => _agents.Count;
}
