using WhatsAppService.Domain.SeedWork;

namespace WhatsAppService.Domain.AggregatesModel.AIAgentAggregate;

/// <summary>
/// EN: Repository interface for AIAgent aggregate root.
/// VI: Interface repository cho AIAgent aggregate root.
/// </summary>
public interface IAIAgentRepository : IRepository<AIAgent>
{
    /// <summary>
    /// EN: Add a new AI agent.
    /// VI: Thêm một AI agent mới.
    /// </summary>
    Task<AIAgent> AddAsync(AIAgent agent, CancellationToken cancellationToken = default);

    /// <summary>
    /// EN: Update an existing AI agent.
    /// VI: Cập nhật một AI agent đã tồn tại.
    /// </summary>
    void Update(AIAgent agent);

    /// <summary>
    /// EN: Get an AI agent by ID.
    /// VI: Lấy một AI agent theo ID.
    /// </summary>
    Task<AIAgent?> GetByIdAsync(Guid id, CancellationToken cancellationToken = default);

    /// <summary>
    /// EN: Get active AI agent for a shop.
    /// VI: Lấy AI agent đang hoạt động cho một shop.
    /// </summary>
    Task<AIAgent?> GetActiveByShopIdAsync(Guid shopId, CancellationToken cancellationToken = default);

    /// <summary>
    /// EN: Get all AI agents for a shop.
    /// VI: Lấy tất cả AI agents cho một shop.
    /// </summary>
    Task<IReadOnlyList<AIAgent>> GetByShopIdAsync(Guid shopId, CancellationToken cancellationToken = default);
}
