using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;
using RD.Jobs.Models;
using RD.Jobs.Models.Entity;

#nullable disable

namespace RD.Jobs.Persistence
{
    public partial class ROCBNDbContext : DbContext, IROCBNDbContext
    {
        public ROCBNDbContext()
        {
        }

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

        public override int SaveChanges()
        {
            throw new InvalidOperationException("This context is read-only.");
        }

        public virtual DbSet<Entity> Entities { get; set; }
        public virtual DbSet<EntityBusinessActivity> EntityBusinessActivities { get; set; }
        public virtual DbSet<EntityOtherInformation> EntityOtherInformations { get; set; }


        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.HasAnnotation("Relational:Collation", "SQL_Latin1_General_CP1_CI_AS");

            modelBuilder.Entity<Entity>(entity =>
            {
                entity.ToTable("Entities", "ent");

                entity.HasIndex(e => e.BusinessNameTypeId, "IX_Entities_BusinessNameTypeId");

                entity.HasIndex(e => e.CountryId, "IX_Entities_CountryId");

                entity.HasIndex(e => e.EntityTypeId, "IX_Entities_EntityTypeId");

                entity.HasIndex(e => e.OwnerId, "IX_Entities_OwnerId");

                entity.Property(e => e.IsFromOldSystem)
                    .IsRequired()
                    .HasDefaultValueSql("(CONVERT([bit],(0)))");

                entity.Property(e => e.RowVersion)
                    .IsRowVersion()
                    .IsConcurrencyToken();

                entity.Property(e => e.ShareCapital).HasColumnType("decimal(18, 4)");
            });

            modelBuilder.Entity<EntityBusinessActivity>(entity =>
            {
                entity.ToTable("EntityBusinessActivities", "ent");

                entity.HasIndex(e => e.BusinessActivityId, "IX_EntityBusinessActivities_BusinessActivityId");

                entity.HasIndex(e => e.EntityId, "IX_EntityBusinessActivities_EntityId");

                entity.Property(e => e.RowVersion)
                    .IsRowVersion()
                    .IsConcurrencyToken();

                entity.HasOne(d => d.Entity)
                    .WithMany(p => p.EntityBusinessActivities)
                    .HasForeignKey(d => d.EntityId);
            });

            modelBuilder.Entity<EntityOtherInformation>(entity =>
            {
                entity.ToTable("EntityOtherInformation", "ent");

                entity.HasIndex(e => e.BusinessSubSectorDetailId, "IX_EntityOtherInformation_BusinessSubSectorDetailId");

                entity.HasIndex(e => e.BusinessSubSectorId, "IX_EntityOtherInformation_BusinessSubSectorId");

                entity.HasIndex(e => e.EntityId, "IX_EntityOtherInformation_EntityId")
                    .IsUnique();

                entity.Property(e => e.RowVersion)
                    .IsRowVersion()
                    .IsConcurrencyToken();

                entity.HasOne(d => d.Entity)
                    .WithOne(p => p.EntityOtherInformation)
                    .HasForeignKey<EntityOtherInformation>(d => d.EntityId)
                    .OnDelete(DeleteBehavior.ClientSetNull);
            });

            OnModelCreatingPartial(modelBuilder);
        }

        partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
    }
}
