using MktXService.Domain.SeedWork;

namespace MktXService.Domain.AggregatesModel.TwitterAccountAggregate;

/// <summary>
/// EN: Repository interface for TwitterAccount aggregate.
/// VI: Interface repository cho TwitterAccount aggregate.
/// </summary>
public interface ITwitterAccountRepository : IRepository<TwitterAccount>
{
    /// <summary>
    /// EN: Add a new Twitter account.
    /// VI: Thêm một tài khoản Twitter mới.
    /// </summary>
    TwitterAccount Add(TwitterAccount account);

    /// <summary>
    /// EN: Update an existing Twitter account.
    /// VI: Cập nhật một tài khoản Twitter hiện có.
    /// </summary>
    void Update(TwitterAccount account);

    /// <summary>
    /// EN: Get Twitter account by ID.
    /// VI: Lấy tài khoản Twitter theo ID.
    /// </summary>
    Task<TwitterAccount?> GetByIdAsync(Guid id);

    /// <summary>
    /// EN: Get Twitter account by Twitter user ID.
    /// VI: Lấy tài khoản Twitter theo Twitter user ID.
    /// </summary>
    Task<TwitterAccount?> GetByTwitterUserIdAsync(string twitterUserId);

    /// <summary>
    /// EN: Get all Twitter accounts for a merchant.
    /// VI: Lấy tất cả tài khoản Twitter của một merchant.
    /// </summary>
    Task<IEnumerable<TwitterAccount>> GetByMerchantIdAsync(Guid merchantId);

    /// <summary>
    /// EN: Get active accounts for a merchant.
    /// VI: Lấy các tài khoản đang hoạt động của một merchant.
    /// </summary>
    Task<IEnumerable<TwitterAccount>> GetActiveByMerchantIdAsync(Guid merchantId);
}
