using MTWorkHR.Application.Models;
using System.Threading.Tasks;

namespace MTWorkHR.Application.Services.Interfaces
{
    public interface IService<TEntity, TDto, TGetAllDto>
        where TEntity : class
        where TDto : class
        where TGetAllDto : class
    {
        Task<PagingResultDto<TGetAllDto>> GetAll(PagingInputDto pagingInputDto);
        Task<TDto> GetById(long id);
        Task Delete(long id);
        Task<TDto> Create(TDto input);
        Task<TDto> Update(TDto input);
    }

    public interface IService<TEntity, TDto, TUpdatDto, TGetAllDto>
        where TEntity : class
        where TDto : class
        where TUpdatDto : class
        where TGetAllDto : class
    {
        Task<PagingResultDto<TGetAllDto>> GetAll(PagingInputDto pagingInputDto);
        Task<TDto> GetById(long id);
        Task Delete(long id);
        Task<TDto> Create(TDto input);
        Task<TDto> Update(TUpdatDto input);
    }

    public interface IService<TEntity, TGetDto,TCreateDto, TUpdatDto, TGetAllDto>
    where TEntity : class
    where TGetDto : class
    where TCreateDto : class
    where TUpdatDto : class
    where TGetAllDto : class
    {
        Task<PagingResultDto<TGetAllDto>> GetAll(PagingInputDto pagingInputDto);
        Task<TGetDto> GetById(long id);
        Task Delete(long id);
        Task<TGetDto> Create(TCreateDto input);
        Task<TGetDto> Update(TUpdatDto input);
    }
}