using PARR.Common.Domain;
using PARR.DAL.DomainModels;
using PARR.DAL.Models.Base;

namespace PARR.DAL.Services.Interfaces.Base
{
    public interface IBaseService<T> where T : class, IBase
    {
        Task<T?> GetAsync(Guid id);
        IQueryable<T> Get();
        IQueryable<T> GetPage(IQueryable<T> query, PaginationFilter paginationFilter);

        Task<bool> CreateAsync(T obj);
        Task<bool> AddRangeAsync(List<T> objs);

        Task<bool> DeleteAsync(Guid id);
        bool Delete(T obj);

        //Task<bool> CommitAsync();
        Task<bool> CommitAsync(IHistoryInitiator? initiator = null);
    }
}
