using Exferia_Aplicacion.General;
using Exferia_Aplicacion.Herencia.Capas;
using Exferia_CRM._0_Modelos;
using Exferia_EntityFramework;
using Exferia_General;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static Exferia_Aplicacion.General.Enumerados;

namespace Exferia_CRM._1_Datos
{
    public class CRMB_RegistrosSincronizacion_Datos : ABS_Datos
    {
        #region Listado
        public override List<dynamic> Obtener_Listado(long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<string> _lst_CamposConRelacionABuscar, List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo, List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo)
        {
            return null;
        }
        public override dynamic Obtener_RegistroListado(long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<string> _lst_CamposConRelacionABuscar, List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo, List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo, long _lng_id, List<long> _lst_id)
        {
            return null;
        }
        protected override void ConsultaRellenar_Listado(Exferia_Entities _dbcontext, long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<long> _lst_idEmpresasRelacionas, List<string> _lst_CamposConRelacionABuscar, long _lng_id, List<long> _lst_id, List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo, List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo)
        {
          
        }
        #endregion

        #region Listado Secundario
        public override List<dynamic> Obtener_Listado_Secundario(long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<string> _lst_CamposConRelacionABuscar, List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo, List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo)
        {
            return null;
        }
        public override dynamic Obtener_RegistroListado_Secundario(long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<string> _lst_CamposConRelacionABuscar, List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo, List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo, long _lng_id, List<long> _lst_ids)
        {
            return null;
        }
        protected override void ConsultaRellenar_Listado_Secundario(Exferia_Entities _obj_Exferia_Entities, long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<long> _lst_idEmpresasRelacionadas, List<string> _lst_CamposConRelacionABuscar, long _lng_id, List<long> _lst_ids, List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo, List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo)
        { }
        #endregion

        #region F3
        public override dynamic Obtener_F3(string _str_filtro, string _str_CampoBusqueda, long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo, List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo)
        {
            return null;
        }
        public override dynamic Obtener_F3_PorId(long _lng_id, long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo, List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo)
        {
            return null;
        }
        protected override void ConsultaRellenar_F3(Exferia_Entities _dbcontext, long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<long> _lst_idEmpresasRelacionas, string _str_CampoBusqueda, string _str_Filtro, long _lng_id, List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo, List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo)
        {
            
        }
        #endregion

        #region Obtener
        public override dynamic Obtener(long _lng_id)
        {
            return null;
        }
        public override dynamic Obtener_Registro_PorCampo(string _str_Filtro, string _str_CampoBusqueda, long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual)
        {
            throw new NotImplementedException();
        }

        public List<INTERNO_CRMB_RegistrosSincronizacion_Listado_Modelo> Obtener_Listado_PorTerminal(string _str_nombreTabla, long _lng_idTerminal)
        {
            Exferia_Entities dbcontext = null;

            List<INTERNO_CRMB_RegistrosSincronizacion_Listado_Modelo> lst_CRMB_RegistrosSincronizacion = null;
            try
            {
                dbcontext = new Exferia_Entities();
                dbcontext.Configuration.LazyLoadingEnabled = false;

                //Consula.....................................................
                var consulta = from obj_CRMB_RegistrosSincronizacion in dbcontext.CRMB_RegistrosSincronizacion
                                    where obj_CRMB_RegistrosSincronizacion.tabla.Equals(_str_nombreTabla) &&
                                          (obj_CRMB_RegistrosSincronizacion.idTerminal > -1 ? obj_CRMB_RegistrosSincronizacion.idTerminal.Value.Equals(_lng_idTerminal) : 1 == 1)
                               select new INTERNO_CRMB_RegistrosSincronizacion_Listado_Modelo
                               {
                                   id = obj_CRMB_RegistrosSincronizacion.id,
                                   idRegistro = obj_CRMB_RegistrosSincronizacion.idRegistro,
                                   idRegistro_Aux_DateTime1 = obj_CRMB_RegistrosSincronizacion.idRegistro_Aux_DateTime1,
                                   idRegistro_Aux_DateTime2 = obj_CRMB_RegistrosSincronizacion.idRegistro_Aux_DateTime2,
                                   idRegistro_Aux_Long1 = obj_CRMB_RegistrosSincronizacion.idRegistro_Aux_Long1,
                                   idRegistro_Aux_Long2 = obj_CRMB_RegistrosSincronizacion.idRegistro_Aux_Long2,
                                   idRegistro_Aux_Long3 = obj_CRMB_RegistrosSincronizacion.idRegistro_Aux_Long3,
                                   idRegistro_Aux_String1 = obj_CRMB_RegistrosSincronizacion.idRegistro_Aux_String1,
                                   idRegistro_Aux_String2 = obj_CRMB_RegistrosSincronizacion.idRegistro_Aux_String2,
                                   idTerminal = obj_CRMB_RegistrosSincronizacion.idTerminal,
                                   orden = obj_CRMB_RegistrosSincronizacion.orden,
                                   tabla = obj_CRMB_RegistrosSincronizacion.tabla,
                                   tipoAccion = obj_CRMB_RegistrosSincronizacion.tipoAccion,
                                   //Terminales
                                   Terminal_Codigo = obj_CRMB_RegistrosSincronizacion.CRM_Terminales.codigo,
                                   Terminal_Descripcion = obj_CRMB_RegistrosSincronizacion.CRM_Terminales.descripcion,
                                   Terminal_FechaBorrado = obj_CRMB_RegistrosSincronizacion.CRM_Terminales.fechaBorrado
                               };
                //............................................................

                if (consulta != null && consulta.Count() > 0)
                {
                    lst_CRMB_RegistrosSincronizacion = consulta.ToList();
                }
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(CRMB_RegistrosSincronizacion_Datos) + "/" + nameof(Obtener_Listado_PorTerminal), true);
            }
            finally
            {
                dbcontext.Database.Connection.Close();
                dbcontext.Dispose();
            }
            return lst_CRMB_RegistrosSincronizacion;
        }

        public string Obtener_Nombre_ClientePotencial(long _lng_id_ClientePotencial)
        {
            Exferia_Entities dbcontext = null;
            string str_resultado = "";
            try
            {
                dbcontext = new Exferia_Entities();
                dbcontext.Configuration.LazyLoadingEnabled = false;

                var p = new SqlParameter
                {
                    ParameterName = _lng_id_ClientePotencial.ToString(),
                    DbType = System.Data.DbType.String,
                    Size = 100,
                    Direction = System.Data.ParameterDirection.Output
                };

                //var consulta = dbcontext.Database.SqlQuery<string>("SELECT codigo + ' ' + razonSocial FROM CRM_ClientesPotenciales WHERE id = '"+ _lng_id.ToString() +"'"  ,p);
                var consulta = dbcontext.Database.SqlQuery<string>("SELECT razonSocial FROM CRM_ClientesPotenciales WHERE id = '" + _lng_id_ClientePotencial.ToString() + "'", p);

                var result = consulta.First();
                str_resultado = result;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CRMB_RegistrosSincronizacion_Datos) + "/" + nameof(Obtener_Nombre_ClientePotencial));
            }

            return str_resultado;
        }
        public string Obtener_Nombre_Provincia(long _lng_idProvincia)
        {
            Exferia_Entities dbcontext = null;
            string str_resultado = "";
            try
            {
                dbcontext = new Exferia_Entities();
                dbcontext.Configuration.LazyLoadingEnabled = false;

                var p = new SqlParameter
                {
                    ParameterName = _lng_idProvincia.ToString(),
                    DbType = System.Data.DbType.String,
                    Size = 100,
                    Direction = System.Data.ParameterDirection.Output
                };

                var consulta = dbcontext.Database.SqlQuery<string>("SELECT descripcion FROM GEN_Provincias WHERE id = '" + _lng_idProvincia.ToString() + "'", p);

                var result = consulta.First();
                str_resultado = result;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CRMB_RegistrosSincronizacion_Datos) + "/" + nameof(Obtener_Nombre_Provincia));
            }

            return str_resultado;

        }
        public string Obtener_Nombre_Encuesta(long _lng_idEncuesta)
        {
            Exferia_Entities dbcontext = null;
            string str_resultado = "";
            try
            {
                dbcontext = new Exferia_Entities();
                dbcontext.Configuration.LazyLoadingEnabled = false;

                var p = new SqlParameter
                {
                    ParameterName = _lng_idEncuesta.ToString(),
                    DbType = System.Data.DbType.String,
                    Size = 100,
                    Direction = System.Data.ParameterDirection.Output
                };

                var consulta = dbcontext.Database.SqlQuery<string>("SELECT descripcion FROM CRM_Encuestas WHERE id = '" + _lng_idEncuesta.ToString() + "'", p);

                var result = consulta.First();
                str_resultado = result;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CRMB_RegistrosSincronizacion_Datos) + "/" + nameof(Obtener_Nombre_Encuesta));
            }

            return str_resultado;

        }
        #endregion

        #region Grabar
        public override INTERNO_ValorDevuelto_Modelo Grabar(object _mdl_obj)
        {
            return null;
        }
        #endregion

        #region Borrar
        public override INTERNO_ValorDevuelto_Modelo Borrar(long _lng_id)
        {
            return null;
        }
        public override INTERNO_ValorDevuelto_Modelo Borrar(long _lng_id, long _lng_idAuxiliar)
        {
            throw new NotImplementedException();
        }
        public override INTERNO_ValorDevuelto_Modelo Borrar(object _mdl_obj)
        {
            throw new NotImplementedException();
        }
        #endregion   

    }
}
