namespace AxCopilot.Services.Agent;

/// <summary>
/// Phase 23: 조건부 도구 인터페이스 (ISP).
/// 도구가 현재 환경에서 사용 가능한지 자가 판단합니다.
/// IAgentTool을 구현하는 도구가 추가로 이 인터페이스를 구현하면,
/// ToolRegistry에서 도구 목록 생성 시 자동 필터링됩니다.
/// </summary>
public interface IConditionalTool
{
    /// <summary>현재 환경에서 이 도구가 사용 가능한지 확인합니다.</summary>
    bool IsEnabled(ToolEnvironmentContext env);
}

/// <summary>도구 활성화 판단에 사용되는 환경 컨텍스트.</summary>
public class ToolEnvironmentContext
{
    /// <summary>앱 설정.</summary>
    public Models.AppSettings? Settings { get; init; }

    /// <summary>현재 활성 탭. "Chat" | "Cowork" | "Code".</summary>
    public string ActiveTab { get; init; } = "Chat";

    /// <summary>작업 폴더 경로.</summary>
    public string? WorkFolder { get; init; }

    /// <summary>작업 폴더에 git 저장소가 있는지 여부.</summary>
    public bool HasGitRepo { get; init; }

    /// <summary>Python 런타임 사용 가능 여부.</summary>
    public bool HasPythonRuntime { get; init; }

    /// <summary>Node.js 런타임 사�� 가능 여부.</summary>
    public bool HasNodeRuntime { get; init; }

    /// <summary>AI 기능 활성화 여부.</summary>
    public bool AiEnabled { get; init; }

    /// <summary>사내 모드 (외부 인터넷 차단) 여부.</summary>
    public bool InternalModeEnabled { get; init; }
}
