using LSFE.Domain.Contracts.Doctor;
using LSFE.Domain.Contracts.Maintenance;
using LSFE.Domain.Contracts.Planning;
using LSFE.Domain.Contracts.Reports;
using LSFE.Domain.Contracts.TimeKeeping;
using LSFE.Domain.Services;
using LSFE.Domain.Services.TimeKeeping;
using LSFE.Infrastructure.Entities.Admin;
using LSFE.Infrastructure.Entities.Doctor;
using LSFE.Infrastructure.Entities.Maintenance;
using LSFE.Infrastructure.Entities.Planning;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LSFE.Domain.Contracts
{
    public interface IUnitOfWork : IDisposable
    {
        IErrorLogger ErrorLogger { get; }
        IDoctorRepo Doctors { get; }
        IAttendanceRepo Attendances { get; }        
        IPlanningRepo Planning { get; }
        IReportsRepo Reports { get; }
        IMaintenanceRepo<Areas> Areas { get; }
        IMaintenanceRepo<Districts> Districts { get; }
        IMaintenanceRepo<Divisions> Divisions { get; }
        IMaintenanceRepo<Territories> Territories { get; }
        IMaintenanceRepo<InstitutionCategory> InstitutionCategories { get; }
        IMaintenanceRepo<Institutions> Institutions { get; }
        IMaintenanceRepo<Products> Products { get; }
        IMaintenanceRepo<Specialization> Specializations { get; }
        IMaintenanceRepo<Inventory> Inventory { get; }
        IMaintenanceRepo<InventoryTransaction> InventoryTransactions { get; }
        IMaintenanceRepo<ProductTransaction> ProductTransactions { get; }
        IMaintenanceRepo<MRRawPlan> MRRawPlans { get; }
        IMaintenanceRepo<CatchUpCall> CatchUpCalls { get; }
        IMaintenanceRepo<MRPlanDetail> MRPlanDetails { get; }
        IMaintenanceRepo<MRPlanHeader> MRPlanHeaders { get; }
        IMaintenanceRepo<UserDevice> UserDevices { get; }
    
        Task<int> SaveChangesAsync();
    }
}