using BMA.EHR.Application.Common.Interfaces;
using BMA.EHR.Domain.Models.Discipline;
using BMA.EHR.Domain.Models.MetaData;
using BMA.EHR.Domain.Models.Organizations;



// using BMA.EHR.Domain.Models.Discipline;
using Microsoft.EntityFrameworkCore;

namespace BMA.EHR.Infrastructure.Persistence
{
    public class DisciplineDbContext : DbContext, IDisciplineDbContext
    {
        #region " Discipline "

        public DbSet<DisciplineComplaint> DisciplineComplaints { get; set; }
        public DbSet<DisciplineComplaint_Channel> DisciplineComplaint_Channels { get; set; }
        public DbSet<DisciplineDirector> DisciplineDirectors { get; set; }
        public DbSet<DisciplineComplaint_Profile> DisciplineComplaint_Profiles { get; set; }
        public DbSet<DisciplineComplaint_Doc> DisciplineComplaint_Docs { get; set; }

        public DbSet<DisciplineInvestigate> DisciplineInvestigates { get; set; }
        public DbSet<DisciplineInvestigateExtend> DisciplineInvestigateExtends { get; set; }
        public DbSet<DisciplineInvestigate_ProfileComplaint> DisciplineInvestigate_ProfileComplaints { get; set; }
        public DbSet<DisciplineInvestigate_DocComplaint> DisciplineInvestigate_DocComplaints { get; set; }
        public DbSet<DisciplineInvestigate_Doc> DisciplineInvestigate_Docs { get; set; }
        public DbSet<DisciplineInvestigate_Director> DisciplineInvestigate_Directors { get; set; }
        public DbSet<DisciplineInvestigateRelevant_Doc> DisciplineInvestigateRelevant_Docs { get; set; }

        public DbSet<DisciplineDisciplinary> DisciplineDisciplinarys { get; set; }
        public DbSet<DisciplineDisciplinaryExtend> DisciplineDisciplinaryExtends { get; set; }
        public DbSet<DisciplineDisciplinary_ProfileComplaintInvestigate> DisciplineDisciplinary_ProfileComplaintInvestigates { get; set; }
        public DbSet<ProfileComplaintInvestigate> ProfileComplaintInvestigate { get; set; }
        public DbSet<DisciplineDisciplinary_DocInvestigateRelevant> DisciplineDisciplinary_DocInvestigateRelevants { get; set; }
        public DbSet<DisciplineDisciplinary_DocInvestigate> DisciplineDisciplinary_DocInvestigates { get; set; }
        public DbSet<DisciplineDisciplinary_DocResult> DisciplineDisciplinary_DocResults { get; set; }
        public DbSet<DisciplineDisciplinary_DocComplaintInvestigate> DisciplineDisciplinary_DocComplaintInvestigates { get; set; }
        public DbSet<DisciplineDisciplinary_DirectorInvestigate> DisciplineDisciplinary_DirectorInvestigates { get; set; }
        public DbSet<DisciplineDisciplinary_DocSummaryEvidence> DisciplineDisciplinary_DocSummaryEvidences { get; set; }
        public DbSet<DisciplineDisciplinary_DocRecordAccuser> DisciplineDisciplinary_DocRecordAccusers { get; set; }
        public DbSet<DisciplineDisciplinary_DocWitnesses> DisciplineDisciplinary_DocWitnessess { get; set; }
        public DbSet<DisciplineDisciplinary_DocOther> DisciplineDisciplinary_DocOthers { get; set; }
        public DbSet<DisciplineDisciplinary_DocRelevant> DisciplineDisciplinary_DocRelevants { get; set; }
        public DbSet<DisciplineReport_Profile> DisciplineReport_Profiles { get; set; }

        public DbSet<DisciplineComplaint_Appeal> DisciplineComplaint_Appeals { get; set; }
        public DbSet<DisciplineComplaint_Appeal_Doc> DisciplineComplaint_Appeal_Docs { get; set; }
        public DbSet<DisciplineComplaint_Appeal_History> DisciplineComplaint_Appeal_Historys { get; set; }
        public DbSet<Document> Documents { get; set; }

        #endregion

        // #region " Meta Data "

        // public DbSet<Prefix> Prefixes { get; set; }

        // public DbSet<BloodGroup> BloodGroups { get; set; }

        // public DbSet<Gender> Genders { get; set; }

        // public DbSet<PhysicalStatus> PhysicalStatuses { get; set; }

        // public DbSet<Religion> Religions { get; set; }

        // public DbSet<EducationLevel> EducationLevels { get; set; }

        // public DbSet<PositionPath> PositionPaths { get; set; }

        // public DbSet<PositionType> PositionTypes { get; set; }

        // public DbSet<PositionEmployeePosition> PositionEmployeePositions { get; set; }

        // public DbSet<PositionEmployeePositionSide> PositionEmployeePositionSides { get; set; }

        // public DbSet<PositionEmployeeGroup> PositionEmployeeGroups { get; set; }

        // public DbSet<PositionEmployeeLine> PositionEmployeeLines { get; set; }

        // public DbSet<PositionEmployeeLevel> PositionEmployeeLevels { get; set; }

        // public DbSet<PositionEmployeeStatus> PositionEmployeeStatuses { get; set; }

        // public DbSet<PositionLine> PositionLines { get; set; }

        // public DbSet<PositionExecutive> PositionExecutives { get; set; }

        // public DbSet<PositionStatus> PositionStatuss { get; set; }

        // public DbSet<PositionLevel> PositionLevels { get; set; }

        // public DbSet<Relationship> Relationships { get; set; }

        // public DbSet<Position> Positions { get; set; }

        // public DbSet<PositionPathSide> PositionPathSides { get; set; }

        // public DbSet<PositionExecutiveSide> PositionExecutiveSides { get; set; }

        // public DbSet<InsigniaType> InsigniaTypes { get; set; }

        // public DbSet<Insignia> Insignias { get; set; }

        // public DbSet<Province> Provinces { get; set; }

        // public DbSet<District> Districts { get; set; }

        // public DbSet<SubDistrict> SubDistricts { get; set; }

        // public DbSet<Holiday> Holidays { get; set; }

        // public DbSet<OrganizationType> OrganizationTypes { get; set; }

        // public DbSet<OrganizationLevel> OrganizationLevels { get; set; }

        // public DbSet<OrganizationOrganization> OrganizationOrganizations { get; set; }

        // public DbSet<OrganizationShortName> OrganizationShortNames { get; set; }

        // public DbSet<OrganizationStatus> OrganizationStatuses { get; set; }

        // public DbSet<OrganizationAgency> OrganizationAgencys { get; set; }

        // public DbSet<OrganizationGovernmentAgency> OrganizationGovernmentAgencys { get; set; }

        // public DbSet<OrganizationTelExternal> OrganizationTelExternals { get; set; }

        // public DbSet<OrganizationTelInternal> OrganizationTelInternals { get; set; }

        // public DbSet<OrganizationFax> OrganizationFaxs { get; set; }

        // public DbSet<RoyalHierarchy> RoyalHierarchys { get; set; }

        // public DbSet<RoyalType> RoyalTypes { get; set; }

        // public DbSet<Royal> Royals { get; set; }

        // #endregion

        // #region " Organizations "

        // public DbSet<AvailablePositionLevelEntity> AvailablePositionLevels { get; set; }

        // public DbSet<PositionMasterEntity> PositionMasters { get; set; }

        // public DbSet<OrganizationEntity> Organizations { get; set; }

        // public DbSet<PositionNumberEntity> PositionNumbers { get; set; }

        // public DbSet<OrganizationPositionEntity> OrganizationPositions { get; set; }

        // public DbSet<ProfilePosition> ProfilePositions { get; set; }

        // #endregion

        public DisciplineDbContext(DbContextOptions<DisciplineDbContext> options) : base(options)
        {
        }

        public Task<int> SaveChangesAsync()
        {
            return base.SaveChangesAsync();
        }

        public void Attatch<T>(T entity) where T : class
        {
            Attach(entity);
        }
    }
}
