namespace Hc900Crawler.Core.Application.Interfaces;

/// <summary>
/// MCP (Model Context Protocol) 서비스 인터페이스
/// Python MCP 서버와의 통신 담당
/// </summary>
public interface IMcpService
{
    /// <summary>
    /// MCP 서버 상태 확인
    /// </summary>
    Task<bool> PingAsync();

    /// <summary>
    /// 도구(tool) 목록 조회
    /// </summary>
    Task<List<McpToolDto>> ListToolsAsync();

    /// <summary>
    /// run_sql 도구 호출 - 안전한 SQL 실행
    /// </summary>
    Task<McpQueryResult> RunSqlAsync(string sql);

    /// <summary>
    /// query_pv_history 도구 호출 - 과거 값 히스토리 조회
    /// </summary>
    Task<McpQueryResult> QueryPvHistoryAsync(
        List<string> tagNames,
        string timeFrom,
        string timeTo,
        int limit = 100);

    /// <summary>
    /// get_tag_metadata 도구 호출 - 태그 메타데이터 검색
    /// </summary>
    Task<McpQueryResult> GetTagMetadataAsync(string query, int limit = 10);

    /// <summary>
    /// list_drawings 도구 호출 - 도면 목록 조회
    /// </summary>
    Task<McpQueryResult> ListDrawingsAsync(string? unitNo = null);

    /// <summary>
    /// query_with_nl 도구 호출 - 자연어 → LLM SQL 생성 → 실행
    /// </summary>
    Task<McpQueryResult> QueryWithNlAsync(string question);
}

#region DTOs

/// <summary>
/// MCP 도구 DTO
/// </summary>
public class McpToolDto
{
    public string Name { get; set; } = string.Empty;
    public string Description { get; set; } = string.Empty;
}

/// <summary>
/// MCP 쿼리 결과 DTO
/// </summary>
public class McpQueryResult
{
    public bool Success { get; set; }
    public string? Error { get; set; }
    public string? Data { get; set; }
}

#endregion