// EN: Repository interface for StaffSchedule.
// VI: Interface repository cho StaffSchedule.

using BookingService.Domain.AggregatesModel.StaffAggregate;
using BookingService.Domain.SeedWork;

namespace BookingService.Infrastructure.Repositories;

public interface IStaffScheduleRepository
{
    IUnitOfWork UnitOfWork { get; }
    StaffSchedule Add(StaffSchedule schedule);
    void Update(StaffSchedule schedule);
    void Remove(StaffSchedule schedule);
    Task<List<StaffSchedule>> GetByStaffIdAsync(Guid staffId, Guid shopId, CancellationToken cancellationToken = default);
    Task<List<StaffSchedule>> GetByShopIdAndDayAsync(Guid shopId, int dayOfWeek, CancellationToken cancellationToken = default);
    Task<List<StaffSchedule>> GetByShopIdAsync(Guid shopId, CancellationToken cancellationToken = default);
    Task<StaffSchedule?> GetByIdAsync(Guid id, CancellationToken cancellationToken = default);
}
