namespace WhatsAppService.Infrastructure.ExternalServices;

/// <summary>
/// EN: Interface for LLM (Large Language Model) service.
/// VI: Interface cho dịch vụ LLM (Large Language Model).
/// </summary>
public interface ILlmService
{
    /// <summary>
    /// EN: Generate a response based on conversation context.
    /// VI: Tạo phản hồi dựa trên ngữ cảnh hội thoại.
    /// </summary>
    Task<LlmResponse> GenerateResponseAsync(
        LlmRequest request,
        CancellationToken cancellationToken = default);

    /// <summary>
    /// EN: Extract intent from user message.
    /// VI: Trích xuất ý định từ tin nhắn người dùng.
    /// </summary>
    Task<IntentResult> ExtractIntentAsync(
        string message,
        string[] possibleIntents,
        CancellationToken cancellationToken = default);
}

/// <summary>
/// EN: LLM request with conversation context.
/// VI: Yêu cầu LLM với ngữ cảnh hội thoại.
/// </summary>
public record LlmRequest(
    string SystemPrompt,
    List<ConversationMessage> Messages,
    int? MaxTokens = null,
    double? Temperature = null);

/// <summary>
/// EN: Message in conversation context.
/// VI: Tin nhắn trong ngữ cảnh hội thoại.
/// </summary>
public record ConversationMessage(
    string Role,  // "user", "assistant", "system"
    string Content);

/// <summary>
/// EN: LLM response with usage stats.
/// VI: Phản hồi LLM với thống kê sử dụng.
/// </summary>
public record LlmResponse(
    bool Success,
    string? Content,
    int PromptTokens,
    int CompletionTokens,
    string? Error);

/// <summary>
/// EN: Intent extraction result.
/// VI: Kết quả trích xuất ý định.
/// </summary>
public record IntentResult(
    bool Success,
    string? Intent,
    double Confidence,
    string? Error);
