using MktZaloService.Domain.SeedWork;

namespace MktZaloService.Domain.AggregatesModel.ChatbotRuleAggregate;

/// <summary>
/// EN: Repository interface for ChatbotRule aggregate.
/// VI: Interface repository cho ChatbotRule aggregate.
/// </summary>
public interface IChatbotRuleRepository : IRepository<ChatbotRule>
{
    /// <summary>
    /// EN: Get rule by ID.
    /// VI: Lấy quy tắc theo ID.
    /// </summary>
    Task<ChatbotRule?> GetByIdAsync(Guid id, CancellationToken ct = default);

    /// <summary>
    /// EN: Get all active rules ordered by priority (descending).
    /// VI: Lấy tất cả quy tắc đang hoạt động theo thứ tự ưu tiên (giảm dần).
    /// </summary>
    Task<List<ChatbotRule>> GetActiveRulesOrderedByPriorityAsync(CancellationToken ct = default);

    /// <summary>
    /// EN: Get all rules (including inactive).
    /// VI: Lấy tất cả quy tắc (bao gồm không hoạt động).
    /// </summary>
    Task<List<ChatbotRule>> GetAllAsync(CancellationToken ct = default);

    /// <summary>
    /// EN: Add a new rule.
    /// VI: Thêm quy tắc mới.
    /// </summary>
    ChatbotRule Add(ChatbotRule rule);

    /// <summary>
    /// EN: Update an existing rule.
    /// VI: Cập nhật quy tắc hiện có.
    /// </summary>
    void Update(ChatbotRule rule);

    /// <summary>
    /// EN: Delete a rule.
    /// VI: Xóa một quy tắc.
    /// </summary>
    void Delete(ChatbotRule rule);
}
