// EN: Repository interface for Therapist aggregate.
// VI: Interface repository cho aggregate Therapist.

using BookingService.Domain.SeedWork;

namespace BookingService.Domain.AggregatesModel.TherapistAggregate;

/// <summary>
/// EN: Repository interface for managing Therapist aggregate persistence.
/// VI: Interface repository để quản lý persistence của aggregate Therapist.
/// </summary>
public interface ITherapistRepository : IRepository<Therapist>
{
    /// <summary>
    /// EN: Add a new therapist.
    /// VI: Thêm chuyên viên mới.
    /// </summary>
    Therapist Add(Therapist therapist);

    /// <summary>
    /// EN: Update an existing therapist.
    /// VI: Cập nhật chuyên viên hiện có.
    /// </summary>
    void Update(Therapist therapist);

    /// <summary>
    /// EN: Get therapist by ID.
    /// VI: Lấy chuyên viên theo ID.
    /// </summary>
    Task<Therapist?> GetByIdAsync(Guid id, CancellationToken cancellationToken = default);

    /// <summary>
    /// EN: Get all therapists for a shop.
    /// VI: Lấy tất cả chuyên viên cho một shop.
    /// </summary>
    Task<List<Therapist>> GetByShopIdAsync(Guid shopId, bool? isActive = null, CancellationToken cancellationToken = default);
}
