using System;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
using bdHerramientaCACOA.db;

namespace bdHerramientaCACOA.dbcontext;

public partial class herramientascacoaContext : DbContext
{
    public herramientascacoaContext(DbContextOptions<herramientascacoaContext> options)
        : base(options)
    {
    }

    public virtual DbSet<codigospostales> codigospostales { get; set; }

    public virtual DbSet<comarcas> comarcas { get; set; }

    public virtual DbSet<conveniocolectivo> conveniocolectivo { get; set; }

    public virtual DbSet<costedespachoprofesionalunused> costedespachoprofesionalunused { get; set; }

    public virtual DbSet<costesdirectos> costesdirectos { get; set; }

    public virtual DbSet<documentacion> documentacion { get; set; }

    public virtual DbSet<enumeraciones> enumeraciones { get; set; }

    public virtual DbSet<estadisticas> estadisticas { get; set; }

    public virtual DbSet<estadisticasfactores> estadisticasfactores { get; set; }

    public virtual DbSet<estadisticasusos> estadisticasusos { get; set; }

    public virtual DbSet<factorescorreccion> factorescorreccion { get; set; }

    public virtual DbSet<ficheros> ficheros { get; set; }

    public virtual DbSet<gruposenumeraciones> gruposenumeraciones { get; set; }

    public virtual DbSet<municipios> municipios { get; set; }

    public virtual DbSet<provincias> provincias { get; set; }

    public virtual DbSet<puntosinformacion> puntosinformacion { get; set; }

    public virtual DbSet<simulaciones> simulaciones { get; set; }

    public virtual DbSet<tipologias> tipologias { get; set; }

    public virtual DbSet<tipoproyecto_documentacion> tipoproyecto_documentacion { get; set; }

    public virtual DbSet<tipoproyectos> tipoproyectos { get; set; }

    public virtual DbSet<usuarios> usuarios { get; set; }

    public virtual DbSet<v_tipoproyecto_documentacion> v_tipoproyecto_documentacion { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder
            .UseCollation("utf8_general_ci")
            .HasCharSet("utf8");

        modelBuilder.Entity<codigospostales>(entity =>
        {
            entity.HasKey(e => e.CodigoPostal).HasName("PRIMARY");

            entity.HasIndex(e => e.CodigoMunicipio, "IX_FK_codigospostales_municipios");

            entity.Property(e => e.CodigoPostal).HasMaxLength(10);
            entity.Property(e => e.CodigoMunicipio).HasMaxLength(10);

            entity.HasOne(d => d.CodigoMunicipioNavigation).WithMany(p => p.codigospostales)
                .HasForeignKey(d => d.CodigoMunicipio)
                .HasConstraintName("FK_codigospostales_municipios");
        });

        modelBuilder.Entity<comarcas>(entity =>
        {
            entity.HasKey(e => e.CodigoComarca).HasName("PRIMARY");

            entity.Property(e => e.CodigoComarca).HasMaxLength(6);
            entity.Property(e => e.CodigoProvincia).HasMaxLength(2);
            entity.Property(e => e.Nombre).HasMaxLength(80);
        });

        modelBuilder.Entity<conveniocolectivo>(entity =>
        {
            entity.HasKey(e => e.idConvenioColectivo).HasName("PRIMARY");

            entity.HasIndex(e => e.idEnumeracion, "convenio_enumeraciones_idx");

            entity.HasIndex(e => e.idProvincia, "convenio_municipios_idx");

            entity.Property(e => e.idConvenioColectivo).HasColumnType("int(11)");
            entity.Property(e => e.idEnumeracion).HasColumnType("int(11)");
            entity.Property(e => e.idProvincia).HasMaxLength(10);

            entity.HasOne(d => d.idEnumeracionNavigation).WithMany(p => p.conveniocolectivo)
                .HasForeignKey(d => d.idEnumeracion)
                .OnDelete(DeleteBehavior.ClientSetNull)
                .HasConstraintName("convenio_enumeraciones");

            entity.HasOne(d => d.idProvinciaNavigation).WithMany(p => p.conveniocolectivo)
                .HasForeignKey(d => d.idProvincia)
                .HasConstraintName("convenio_provincias");
        });

        modelBuilder.Entity<costedespachoprofesionalunused>(entity =>
        {
            entity.HasKey(e => e.idCosteDespachoProfesional).HasName("PRIMARY");

            entity.Property(e => e.idCosteDespachoProfesional).HasColumnType("int(11)");
            entity.Property(e => e.numTrabajadores).HasColumnType("int(11)");
        });

        modelBuilder.Entity<costesdirectos>(entity =>
        {
            entity.HasKey(e => e.idcostesdirectos).HasName("PRIMARY");

            entity.Property(e => e.idcostesdirectos).HasColumnType("int(11)");
            entity.Property(e => e.Arquitectos).HasColumnType("int(11)");
            entity.Property(e => e.ArquitectosTecnicos).HasColumnType("int(11)");
            entity.Property(e => e.Delineantes).HasColumnType("int(11)");
            entity.Property(e => e.TotalTrabajadores).HasColumnType("int(11)");
        });

        modelBuilder.Entity<documentacion>(entity =>
        {
            entity.HasKey(e => e.iddocumentacion).HasName("PRIMARY");

            entity.Property(e => e.iddocumentacion).HasColumnType("int(11)");
            entity.Property(e => e.Descripcion).HasMaxLength(250);
        });

        modelBuilder.Entity<enumeraciones>(entity =>
        {
            entity.HasKey(e => e.idEnumeracion).HasName("PRIMARY");

            entity.HasIndex(e => e.Codigo, "Codigo_UNIQUE").IsUnique();

            entity.HasIndex(e => e.idGrupoEnumeracion, "IX_FK_enumeraciones_gruposenumeracion");

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

            entity.Property(e => e.idEnumeracion).HasColumnType("int(11)");
            entity.Property(e => e.Codigo).HasMaxLength(40);
            entity.Property(e => e.Descripcion).HasMaxLength(200);
            entity.Property(e => e.Fecha1).HasColumnType("datetime");
            entity.Property(e => e.Fecha2).HasColumnType("datetime");
            entity.Property(e => e.Orden).HasColumnType("int(11)");
            entity.Property(e => e.ValorAlfabetico1).HasMaxLength(40);
            entity.Property(e => e.ValorAlfabetico2).HasMaxLength(40);
            entity.Property(e => e.ValorAlfabetico3).HasMaxLength(40);
            entity.Property(e => e.ValorAlfabetico4).HasMaxLength(40);
            entity.Property(e => e.ValorAlfabeticoLargo).HasMaxLength(2000);
            entity.Property(e => e.idGrupoEnumeracion).HasColumnType("int(11)");

            entity.HasOne(d => d.idGrupoEnumeracionNavigation).WithMany(p => p.enumeraciones)
                .HasForeignKey(d => d.idGrupoEnumeracion)
                .HasConstraintName("FK_enumeraciones_gruposenumeracion");
        });

        modelBuilder.Entity<estadisticas>(entity =>
        {
            entity.HasKey(e => e.idEstadistica).HasName("PRIMARY");

            entity.HasIndex(e => e.idSimulacion, "FK_estadisticas_simulaciones_idx");

            entity.Property(e => e.idEstadistica).HasColumnType("int(11)");
            entity.Property(e => e.dato1).HasMaxLength(45);
            entity.Property(e => e.dato2).HasMaxLength(45);
            entity.Property(e => e.dato3).HasMaxLength(45);
            entity.Property(e => e.documento).HasMaxLength(50);
            entity.Property(e => e.idSimulacion).HasColumnType("int(11)");
            entity.Property(e => e.tipoDocumento).HasMaxLength(50);

            entity.HasOne(d => d.idSimulacionNavigation).WithMany(p => p.estadisticas)
                .HasForeignKey(d => d.idSimulacion)
                .OnDelete(DeleteBehavior.Cascade)
                .HasConstraintName("FK_estadisticas_simulaciones");
        });

        modelBuilder.Entity<estadisticasfactores>(entity =>
        {
            entity.HasKey(e => e.idestadisticasFactores).HasName("PRIMARY");

            entity.HasIndex(e => e.idsimulacion, "FK_estadisticasfactores_simulaciones_idx");

            entity.Property(e => e.idestadisticasFactores).HasColumnType("int(11)");
            entity.Property(e => e.idsimulacion).HasColumnType("int(11)");
            entity.Property(e => e.nombre).HasMaxLength(45);
            entity.Property(e => e.tipo).HasMaxLength(45);

            entity.HasOne(d => d.idsimulacionNavigation).WithMany(p => p.estadisticasfactores)
                .HasForeignKey(d => d.idsimulacion)
                .OnDelete(DeleteBehavior.Cascade)
                .HasConstraintName("FK_estadisticasfactores_simulaciones");
        });

        modelBuilder.Entity<estadisticasusos>(entity =>
        {
            entity.HasKey(e => e.idestadisticaUsos).HasName("PRIMARY");

            entity.HasIndex(e => e.idSimulacion, "FK_estadisticasusos_simulaciones_idx");

            entity.Property(e => e.idestadisticaUsos).HasColumnType("int(11)");
            entity.Property(e => e.idIntervencion).HasColumnType("int(11)");
            entity.Property(e => e.idSimulacion).HasColumnType("int(11)");
            entity.Property(e => e.idTipologia).HasColumnType("int(11)");
            entity.Property(e => e.idUso).HasColumnType("int(11)");

            entity.HasOne(d => d.idSimulacionNavigation).WithMany(p => p.estadisticasusos)
                .HasForeignKey(d => d.idSimulacion)
                .OnDelete(DeleteBehavior.Cascade)
                .HasConstraintName("FK_estadisticasusos_simulaciones");
        });

        modelBuilder.Entity<factorescorreccion>(entity =>
        {
            entity.HasKey(e => e.idFactorCorreccion).HasName("PRIMARY");

            entity.HasIndex(e => e.idEnumeracion, "factoresEnumeracion_idx");

            entity.Property(e => e.idFactorCorreccion).HasColumnType("int(11)");
            entity.Property(e => e.Descripcion).HasMaxLength(45);
            entity.Property(e => e.idEnumeracion).HasColumnType("int(11)");

            entity.HasOne(d => d.idEnumeracionNavigation).WithMany(p => p.factorescorreccion)
                .HasForeignKey(d => d.idEnumeracion)
                .HasConstraintName("factoresEnumeracion");
        });

        modelBuilder.Entity<ficheros>(entity =>
        {
            entity.HasKey(e => e.idFichero).HasName("PRIMARY");

            entity.HasIndex(e => e.idTipo, "IX_FK_fichero_tipo");

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

            entity.Property(e => e.idFichero).HasColumnType("int(11)");
            entity.Property(e => e.Codigo).HasMaxLength(40);
            entity.Property(e => e.Descripcion).HasMaxLength(80);
            entity.Property(e => e.FechaCreacion).HasColumnType("datetime");
            entity.Property(e => e.NombreFichero).HasMaxLength(100);
            entity.Property(e => e.Observaciones).HasMaxLength(255);
            entity.Property(e => e.idTipo).HasColumnType("int(11)");

            entity.HasOne(d => d.idTipoNavigation).WithMany(p => p.ficheros)
                .HasForeignKey(d => d.idTipo)
                .HasConstraintName("FK_fichero_tipo");
        });

        modelBuilder.Entity<gruposenumeraciones>(entity =>
        {
            entity.HasKey(e => e.idGrupoEnumeracion).HasName("PRIMARY");

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

            entity.Property(e => e.idGrupoEnumeracion).HasColumnType("int(11)");
            entity.Property(e => e.Descripcion).HasMaxLength(60);
            entity.Property(e => e.Grupo).HasMaxLength(20);
        });

        modelBuilder.Entity<municipios>(entity =>
        {
            entity.HasKey(e => e.CodigoMunicipio).HasName("PRIMARY");

            entity.HasIndex(e => e.CodigoComarca, "IX_FK_municipios_comarcas");

            entity.HasIndex(e => e.CodigoProvincia, "IX_FK_municipios_provincias");

            entity.Property(e => e.CodigoMunicipio).HasMaxLength(10);
            entity.Property(e => e.CodigoComarca).HasMaxLength(6);
            entity.Property(e => e.CodigoProvincia).HasMaxLength(2);
            entity.Property(e => e.DC).HasMaxLength(2);
            entity.Property(e => e.Nombre).HasMaxLength(80);

            entity.HasOne(d => d.CodigoComarcaNavigation).WithMany(p => p.municipios)
                .HasForeignKey(d => d.CodigoComarca)
                .HasConstraintName("FK_municipios_comarcas");

            entity.HasOne(d => d.CodigoProvinciaNavigation).WithMany(p => p.municipios)
                .HasForeignKey(d => d.CodigoProvincia)
                .HasConstraintName("FK_municipios_provincias");
        });

        modelBuilder.Entity<provincias>(entity =>
        {
            entity.HasKey(e => e.CodigoProvincia).HasName("PRIMARY");

            entity.Property(e => e.CodigoProvincia).HasMaxLength(2);
            entity.Property(e => e.Nombre).HasMaxLength(80);
        });

        modelBuilder.Entity<puntosinformacion>(entity =>
        {
            entity.HasKey(e => e.idPuntosInformacion).HasName("PRIMARY");

            entity.Property(e => e.idPuntosInformacion).HasColumnType("int(11)");
            entity.Property(e => e.Descripcion).HasMaxLength(400);
            entity.Property(e => e.Titulo).HasMaxLength(60);
            entity.Property(e => e.idTipoHerramienta).HasColumnType("int(11)");
        });

        modelBuilder.Entity<simulaciones>(entity =>
        {
            entity.HasKey(e => e.idSimulacion).HasName("PRIMARY");

            entity.UseCollation("utf8_bin");

            entity.HasIndex(e => e.idCodigo, "simulacionCodigo_idx");

            entity.HasIndex(e => e.idFicheroJSON, "simulacionFichero_idx");

            entity.HasIndex(e => e.idTipoSimulacion, "simulacionTipo_idx");

            entity.Property(e => e.idSimulacion).HasColumnType("int(11)");
            entity.Property(e => e.Descripcion).HasMaxLength(150);
            entity.Property(e => e.FechaCreacion).HasColumnType("datetime");
            entity.Property(e => e.FechaModificacion).HasColumnType("datetime");
            entity.Property(e => e.idCodigo).HasColumnType("int(11)");
            entity.Property(e => e.idFicheroJSON).HasColumnType("int(11)");
            entity.Property(e => e.idTipoSimulacion).HasColumnType("int(11)");

            entity.HasOne(d => d.idCodigoNavigation).WithMany(p => p.simulaciones)
                .HasForeignKey(d => d.idCodigo)
                .OnDelete(DeleteBehavior.ClientSetNull)
                .HasConstraintName("simulacionCodigo");

            entity.HasOne(d => d.idFicheroJSONNavigation).WithMany(p => p.simulaciones)
                .HasForeignKey(d => d.idFicheroJSON)
                .HasConstraintName("simulacionFichero");

            entity.HasOne(d => d.idTipoSimulacionNavigation).WithMany(p => p.simulaciones)
                .HasForeignKey(d => d.idTipoSimulacion)
                .OnDelete(DeleteBehavior.ClientSetNull)
                .HasConstraintName("simulacionTipo");
        });

        modelBuilder.Entity<tipologias>(entity =>
        {
            entity.HasKey(e => e.idtipologia).HasName("PRIMARY");

            entity.HasIndex(e => e.idGrupoTip, "enumeraciones_tipologia_idx");

            entity.Property(e => e.idtipologia).HasColumnType("int(11)");
            entity.Property(e => e.Descripcion).HasMaxLength(100);
            entity.Property(e => e.idGrupoTip).HasColumnType("int(11)");

            entity.HasOne(d => d.idGrupoTipNavigation).WithMany(p => p.tipologias)
                .HasForeignKey(d => d.idGrupoTip)
                .OnDelete(DeleteBehavior.ClientSetNull)
                .HasConstraintName("enumeraciones_tipologia");
        });

        modelBuilder.Entity<tipoproyecto_documentacion>(entity =>
        {
            entity.HasKey(e => e.idtipoproyecto_documentacion).HasName("PRIMARY");

            entity.HasIndex(e => e.iddocumentacion, "FK_iddocumentacion_documentacion_idx");

            entity.HasIndex(e => e.idtipoproyecto, "FK_idtipoproyecto_tipoproyecto_idx");

            entity.Property(e => e.idtipoproyecto_documentacion).HasColumnType("int(11)");
            entity.Property(e => e.iddocumentacion).HasColumnType("int(11)");
            entity.Property(e => e.idtipoproyecto).HasColumnType("int(11)");
            entity.Property(e => e.orden).HasColumnType("int(11)");

            entity.HasOne(d => d.iddocumentacionNavigation).WithMany(p => p.tipoproyecto_documentacion)
                .HasForeignKey(d => d.iddocumentacion)
                .HasConstraintName("FK_iddocumentacion_documentacion");

            entity.HasOne(d => d.idtipoproyectoNavigation).WithMany(p => p.tipoproyecto_documentacion)
                .HasForeignKey(d => d.idtipoproyecto)
                .HasConstraintName("FK_idtipoproyecto_tipoproyecto");
        });

        modelBuilder.Entity<tipoproyectos>(entity =>
        {
            entity.HasKey(e => e.idtipoproyectos).HasName("PRIMARY");

            entity.ToTable(tb => tb.HasComment("			"));

            entity.HasIndex(e => e.idTipoDocumento, "FK_tipoproyectos_enumeraciones_idx");

            entity.Property(e => e.idtipoproyectos).HasColumnType("int(11)");
            entity.Property(e => e.Abreviatura).HasMaxLength(10);
            entity.Property(e => e.Descripcion).HasMaxLength(200);
            entity.Property(e => e.idTipoDocumento).HasColumnType("int(11)");

            entity.HasOne(d => d.idTipoDocumentoNavigation).WithMany(p => p.tipoproyectos)
                .HasForeignKey(d => d.idTipoDocumento)
                .OnDelete(DeleteBehavior.ClientSetNull)
                .HasConstraintName("FK_tipoproyectos_enumeraciones");
        });

        modelBuilder.Entity<usuarios>(entity =>
        {
            entity.HasKey(e => e.idUsuario).HasName("PRIMARY");

            entity.Property(e => e.idUsuario).HasColumnType("int(11)");
            entity.Property(e => e.Codigo).HasColumnType("int(11)");
            entity.Property(e => e.Contrasena).HasMaxLength(45);
            entity.Property(e => e.FechaCreacion).HasColumnType("datetime");
            entity.Property(e => e.FechaUltimoAcceso).HasColumnType("datetime");
        });

        modelBuilder.Entity<v_tipoproyecto_documentacion>(entity =>
        {
            entity
                .HasNoKey()
                .ToView("v_tipoproyecto_documentacion");

            entity.Property(e => e.documentacion).HasMaxLength(250);
            entity.Property(e => e.iddocumentacion).HasColumnType("int(11)");
            entity.Property(e => e.idtipoproyecto).HasColumnType("int(11)");
            entity.Property(e => e.idtipoproyecto_documentacion).HasColumnType("int(11)");
            entity.Property(e => e.orden).HasColumnType("int(11)");
            entity.Property(e => e.tipoproyecto).HasMaxLength(200);
        });

        OnModelCreatingPartial(modelBuilder);
    }

    partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
}
