using Exferia_Aplicacion.General;
using Exferia_Controles;
using Exferia_Formularios;
using Exferia_Kronos._2_Datos;
using Exferia_Kronos._4_Vistas;
using Exferia_Kronos._4_Vistas.F3;
using Exferia_Kronos._4_Vistas.Listados;
using Exferia_Kronos.General;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Exferia_Kronos
{
    public class Opciones
    {
        /// <summary>
        /// Evento que se activa cuando se selecciona un registro
        /// </summary>
        /// 
        public event EventHandler<INTERNO_EventArgs_Listado> ABS_Opciones_Evento_RegistroSeleccionado;
        protected void Evento_RegistroSeleccionado(object sender, INTERNO_EventArgs_Listado e)
        {
            INTERNO_EventArgs_Listado obj_Exferia_EventArgs = new INTERNO_EventArgs_Listado(null, null, e.REGISTRO_SELECCIONADO, null,e.Objeto_Auxiliar,e.Listado_INTERNO_Filtro_OpcionPadre_Modelo,e.CamposValores_ParaMantenimiento);
            EventHandler<INTERNO_EventArgs_Listado> obj_EventHandler = ABS_Opciones_Evento_RegistroSeleccionado;
            if (obj_EventHandler != null)
                obj_EventHandler(this, obj_Exferia_EventArgs);
        }

        #region Listado
        private void CARGAR_LISTADO(string _str_Opcion,
                                                        bool _bol_ListadoSeleccionable,
                                                        int _int_AccionesPermitidas,
                                                        P_Base _frm_P_Base_Origen,
                                                        INTERNO_ValoresGenerales_Modelo _mdl_INTERNO_ValoresGenerales_Modelo,
                                                        DateTime _dtt_FechaPorDefecto,
                                                        string _str_SeleccionFiltro_NombreCampo,
                                                        string _str_SeleccionFiltro_Valor,
                                                        bool _bol_SeleccionFiltro_SencibleMayusculasMinusculas,
                                                        bool _bol_SeleccionFiltro_PalabraCompleta,
                                                        List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo,
                                                        List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo,
                                                        Dictionary<string, object> _dct_ListadoFiltros,
                                                        object _obj_Auxiliar,
                                                        object _obj_Filtros_Auxiliar,
                                        ABS_Listado _obj_ABS_Listado)
        {
            //Nombre de la DLL Actual
            string str_Nombre_DLL = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;

            Funciones_Listado obj_Funciones_Listado = new Funciones_Listado();

            //EVENTOS PUBLICOS
            obj_Funciones_Listado.Funciones_Listado_Evento_RegistroSeleccionado += new System.EventHandler<INTERNO_EventArgs_Listado>(Evento_RegistroSeleccionado);

            //Datos Variables segun Opcione ###########################################################
            ABS_Listado obj_ABS_Listado_Auxiliar = null;

            //TAREAPROGRAMADA
            if (_str_Opcion.Equals(Variables.G_STR_OPCION_KRO_TAREAPROGRAMADA))
            {
                obj_ABS_Listado_Auxiliar = new ABS_Listado_KRO_TareasProgramadas();
            }


            //#########################################################################################

            //Llamar a la Funcion general que cargara los datos y generar la pantalla del listado
            obj_Funciones_Listado.Mostrar_Listado(_bol_ListadoSeleccionable,
                                                    _int_AccionesPermitidas,
                                                    _frm_P_Base_Origen,
                                                    _mdl_INTERNO_ValoresGenerales_Modelo,
                                                    _dtt_FechaPorDefecto,
                                                    _str_SeleccionFiltro_NombreCampo,
                                                    _str_SeleccionFiltro_Valor,
                                                    _bol_SeleccionFiltro_SencibleMayusculasMinusculas,
                                                    _bol_SeleccionFiltro_PalabraCompleta,
                                                    str_Nombre_DLL,
                                                    _str_Opcion,
                                                    obj_ABS_Listado_Auxiliar,
                                                    _lst_INTERNO_Filtro_OpcionPadre_Modelo,
                                                    _lst_INTERNO_Filtro_Modelo,
                                                    _dct_ListadoFiltros,
                                                    _obj_Auxiliar);
        }

        private List<dynamic> OBTENER_LISTADO(string _str_Opcion,
                                                        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)
        {
            List<dynamic> lst_Valores = null;

            try
            {
                //TAREAPROGRAMADA
                if (_str_Opcion.Equals(Variables.G_STR_OPCION_KRO_TAREAPROGRAMADA))
                {
                    KRO_TareasProgramadas_Datos g_obj_KRO_TareasProgramadas_Datos = new KRO_TareasProgramadas_Datos();
                    lst_Valores = g_obj_KRO_TareasProgramadas_Datos.Obtener_Listado(_lng_idEmpresaSeleccionada, _lng_idEjercicioActual, _lst_CamposConRelacionABuscar, _lst_INTERNO_Filtro_OpcionPadre_Modelo, _lst_INTERNO_Filtro_Modelo);
                }
                //TAREAPROGRAMADA_HISTORICO
                else if (_str_Opcion.Equals(Variables.G_STR_OPCION_KRO_TAREAPROGRAMADA_HISTORICO))
                {
                    KRO_TareasProgramadas_Historico_Datos g_obj_KRO_TareasProgramadas_Historico_Datos = new KRO_TareasProgramadas_Historico_Datos();
                    lst_Valores = g_obj_KRO_TareasProgramadas_Historico_Datos.Obtener_Listado(_lng_idEmpresaSeleccionada, _lng_idEjercicioActual, _lst_CamposConRelacionABuscar, _lst_INTERNO_Filtro_OpcionPadre_Modelo, _lst_INTERNO_Filtro_Modelo);
                }
            }
            catch (Control_Errores)
            { }
            catch (Exception)
            { }

            return lst_Valores;
        }

        private dynamic OBTENER_REGISTROSLISTADO(string _str_Opcion,
                                                        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)
        {
            dynamic dnm_Valor = null;

            try
            {
                //TAREAPROGRAMADA
                if (_str_Opcion.Equals(Variables.G_STR_OPCION_KRO_TAREAPROGRAMADA))
                {
                    KRO_TareasProgramadas_Datos obj_KRO_TareasProgramadas_Datos = new KRO_TareasProgramadas_Datos();
                    dnm_Valor = obj_KRO_TareasProgramadas_Datos.Obtener_RegistroListado(_lng_idEmpresaSeleccionada, _lng_idEjercicioActual, _lst_CamposConRelacionABuscar, _lst_INTERNO_Filtro_OpcionPadre_Modelo, _lst_INTERNO_Filtro_Modelo, _lng_id, _lst_ids);
                }
                //TAREAPROGRAMADA_Historico
                else if (_str_Opcion.Equals(Variables.G_STR_OPCION_KRO_TAREAPROGRAMADA_HISTORICO))
                {
                    KRO_TareasProgramadas_Historico_Datos obj_KRO_TareasProgramadas_Historico_Datos = new KRO_TareasProgramadas_Historico_Datos();
                    dnm_Valor = obj_KRO_TareasProgramadas_Historico_Datos.Obtener_RegistroListado(_lng_idEmpresaSeleccionada, _lng_idEjercicioActual, _lst_CamposConRelacionABuscar, _lst_INTERNO_Filtro_OpcionPadre_Modelo, _lst_INTERNO_Filtro_Modelo,_lng_id ,_lst_ids);
                }

            }
            catch (Control_Errores)
            { }
            catch (Exception)
            { }

            return dnm_Valor;
        }
        #endregion

        #region Listado Secundario
        private void MOSTRAR_LISTADO_SECUNDARIO(string _str_Opcion,
                                                string _str_idNodoArbolSecundarioSeleccion,
                                                P_Base _frm_P_Base_Origen,
                                                INTERNO_ValoresGenerales_Modelo _mdl_INTERNO_ValoresGenerales_Modelo,
                                                DateTime _dtt_FechaPorDefecto,
                                                List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo,
                                                List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo,
                                                Dictionary<string, object> _dct_ListadoFiltros,
                                                object _obj_Auxiliar)
        {
            //Nombre de la DLL Actual
            string str_Nombre_DLL = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;

            Funciones_Listado_Secundario obj_Funciones_Listado_Secundario = new Funciones_Listado_Secundario();

            //Datos Variables segun Opcione ###########################################################
            ABS_Listado obj_ABS_Listado_Auxiliar = null;

            //Llamar a la Funcion general que cargara los datos y generar la pantalla del listado
            obj_Funciones_Listado_Secundario.Mostrar_Listado(_frm_P_Base_Origen,
                                                            _str_idNodoArbolSecundarioSeleccion,
                                                            _mdl_INTERNO_ValoresGenerales_Modelo,
                                                            _dtt_FechaPorDefecto,
                                                            str_Nombre_DLL,
                                                            _str_Opcion,
                                                            obj_ABS_Listado_Auxiliar,
                                                            _lst_INTERNO_Filtro_OpcionPadre_Modelo,
                                                            _lst_INTERNO_Filtro_Modelo,
                                                            _dct_ListadoFiltros,
                                                            _obj_Auxiliar);
        }
        private List<dynamic> OBTENER_LISTADO_SECUNDARIO(string _str_Opcion,
                                                           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)
        {
            List<dynamic> lst_Valores = null;

            try
            {
            }
            catch (Control_Errores)
            { }
            catch (Exception)
            { }

            return lst_Valores;
        }
        private dynamic OBTENER_REGISTROSLISTADO_SECUNDARIO(string _str_Opcion,
                                                        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)
        {
            dynamic dnm_Valor = null;

            try
            {
            }
            catch (Control_Errores)
            { }
            catch (Exception)
            { }

            return dnm_Valor;
        }
        #endregion

        private dynamic OBTENER_REGISTRO_F3(string _str_Opcion,
                                                   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,
                                                   object _obj_Filtros_Auxiliar)
        {
            dynamic dnm_Valores = null;

            try
            {
                //TAREAPROGRAMADA
                if(_str_Opcion.Equals(Variables.G_STR_OPCION_KRO_TAREAPROGRAMADA))
                {
                    KRO_TareasProgramadas_Datos obj_KRO_TareasProgramadas_Datos = new KRO_TareasProgramadas_Datos();
                    dnm_Valores = obj_KRO_TareasProgramadas_Datos.Obtener_F3(_str_filtro, _str_CampoBusqueda, _lng_idEmpresaSeleccionada, _lng_idEjercicioActual, _lst_INTERNO_Filtro_OpcionPadre_Modelo, _lst_INTERNO_Filtro_Modelo);
                }
            }
            catch (Control_Errores)
            { }
            catch (Exception)
            { }

            return dnm_Valores;
        }

        private dynamic OBTENER_REGISTRO_F3_PORID(string _str_Opcion,
                                                            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)
        {
            dynamic dnm_Valores = null;

            try
            {
                //TAREAPROGRAMADA
                if(_str_Opcion.Equals(Variables.G_STR_OPCION_KRO_TAREAPROGRAMADA))
                {
                    KRO_TareasProgramadas_Datos obj_KRO_TareasProgramadas_Datos = new KRO_TareasProgramadas_Datos();
                    dnm_Valores = obj_KRO_TareasProgramadas_Datos.Obtener_F3_PorId(_lng_id, _lng_idEmpresaSeleccionada, _lng_idEjercicioActual, _lst_INTERNO_Filtro_OpcionPadre_Modelo, _lst_INTERNO_Filtro_Modelo);
                }
            }
            catch (Control_Errores)
            { }
            catch (Exception)
            { }

            return dnm_Valores;
        }

        private ABS_F3 OBTENCION_ABS_F3(string _str_Opcion)
        {
            ABS_F3 obj_ABS_F3 = null;

            //TAREAPROGRAMADA
            if(_str_Opcion.Equals(Variables.G_STR_OPCION_KRO_TAREAPROGRAMADA))
            {
                obj_ABS_F3 = new ABS_F3_KRO_TareasProgramadas();
            }

            return obj_ABS_F3;
        }

        private void MOSTRAR_EN_MANTENIMIENTO(string _str_Opcion,
                                                   P_Base _frm_P_Base_Origen,
                                                   Exferia_F3 _usc_Exferia_F3_Origen,
                                                   INTERNO_ValoresGenerales_Modelo _mdl_INTERNO_ValoresGenerales_Modelo,
                                                   DateTime _dtt_FechaPorDefecto,
                                                   INTERNO_OpcionesDetalle_Modelo _mdl_INTERNO_OpcionesDetalle_Modelo,
                                                   long _lng_RegistroSeleccionado,
                                                   string _str_Campo1_Valor,
                                                   string _str_Campo2_Valor,
                                                   object _obj_Auxiliar,
                                                        List<INTERNO_CampoValor_Modelo> _lst_ListadoArgumentos_ParaMantemiento)
        {
            //TAREAPROGRAMADA
            if(_str_Opcion.Equals(Variables.G_STR_OPCION_KRO_TAREAPROGRAMADA))
            {
                P_TareaProgramada frm_P_TareaProgramada = new P_TareaProgramada(_mdl_INTERNO_ValoresGenerales_Modelo, _dtt_FechaPorDefecto, _mdl_INTERNO_OpcionesDetalle_Modelo);
                frm_P_TareaProgramada.P_Base_Campo_1 = _str_Campo1_Valor;
                frm_P_TareaProgramada.P_Base_Campo_2 = _str_Campo2_Valor;

                //Se llamo desde una pantalla
                if (_frm_P_Base_Origen != null)
                {
                    frm_P_TareaProgramada.P_Base_PantallaPadre_IdentificadorTAG = _frm_P_Base_Origen.Tag.ToString();
                    frm_P_TareaProgramada.P_Base_PantallaOrigen = _frm_P_Base_Origen;
                }
                //Se llamo desde un control F3
                else
                {
                    frm_P_TareaProgramada.P_Base_PantallaPadre_IdentificadorTAG = "";
                    frm_P_TareaProgramada.P_Base_F3Origen = _usc_Exferia_F3_Origen;
                }

                //Modificar
                if (_lng_RegistroSeleccionado > 0)
                {
                    frm_P_TareaProgramada.P_Base_TituloPantalla_CaminoHormigas = _mdl_INTERNO_OpcionesDetalle_Modelo.descripcion_TituloMantenimiento.ToUpper();
                    frm_P_TareaProgramada.P_Base_id = _lng_RegistroSeleccionado;
                    frm_P_TareaProgramada.P_Base_TipoAperturaPantalla = 1;
                }
                //Alta
                else
                {
                    frm_P_TareaProgramada.P_Base_TipoAperturaPantalla = 0;
                    frm_P_TareaProgramada.P_Base_TituloPantalla_CaminoHormigas = _mdl_INTERNO_OpcionesDetalle_Modelo.descripcion_TituloMantenimiento.ToUpper() + " -> Alta";
                }

                Funciones_PanelPrincipal.Cargar_PantallaEmpotrada(frm_P_TareaProgramada, _str_Opcion);
            }
            //#########################################################################################
        }

        private void Cargar_MantenimientoSimple(P_Base _frm_P_Base_Origen,
                                                Exferia_F3 _usc_Exferia_F3_Origen,
                                                INTERNO_OpcionesDetalle_Modelo _mdl_INTERNO_OpcionesDetalle_Modelo,
                                                long _lng_RegistroSeleccionado,
                                                P_MantenimientoSimple _frm_P_MantenimientoSimple,
                                                string _str_Opcion)
        {
            if (_frm_P_Base_Origen != null)
            {
                _frm_P_MantenimientoSimple.P_Base_PantallaPadre_IdentificadorTAG = _frm_P_Base_Origen.Tag.ToString();
                _frm_P_MantenimientoSimple.P_Base_PantallaOrigen = _frm_P_Base_Origen;
            }
            //Se llamo desde un control F3
            else
            {
                _frm_P_MantenimientoSimple.P_Base_PantallaPadre_IdentificadorTAG = "";
                _frm_P_MantenimientoSimple.P_Base_F3Origen = _usc_Exferia_F3_Origen;
            }

            //Modificar
            if (_lng_RegistroSeleccionado > 0)
            {
                _frm_P_MantenimientoSimple.P_Base_TituloPantalla_CaminoHormigas = _mdl_INTERNO_OpcionesDetalle_Modelo.descripcion_TituloMantenimiento.ToUpper();
                _frm_P_MantenimientoSimple.P_Base_id = _lng_RegistroSeleccionado;
                _frm_P_MantenimientoSimple.P_Base_TipoAperturaPantalla = 1;
            }
            //Alta
            else
            {
                _frm_P_MantenimientoSimple.P_Base_TipoAperturaPantalla = 0;
                _frm_P_MantenimientoSimple.P_Base_TituloPantalla_CaminoHormigas = _mdl_INTERNO_OpcionesDetalle_Modelo.descripcion_TituloMantenimiento.ToUpper() + " -> Alta";
            }

            Funciones_PanelPrincipal.Cargar_PantallaEmpotrada(_frm_P_MantenimientoSimple, _str_Opcion);
        }

        private dynamic OBTENER_REGISTRO(string _str_Opcion, long _lng_id, long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual)
        {
            dynamic dnm_Valores = null;

            try
            {
                //TAREAPROGRAMADA
                if (_str_Opcion.Equals(Variables.G_STR_OPCION_KRO_TAREAPROGRAMADA))
                {
                    KRO_TareasProgramadas_Datos obj_KRO_TareasProgramadas_Datos = new KRO_TareasProgramadas_Datos();
                    dnm_Valores = obj_KRO_TareasProgramadas_Datos.Obtener(_lng_id);
                }
                //TAREAPROGRAMADA_Historico
                else if(_str_Opcion.Equals(Variables.G_STR_OPCION_KRO_TAREAPROGRAMADA_HISTORICO))
                {
                    KRO_TareasProgramadas_Historico_Datos obj_KRO_TareasProgramadas_Historico_Datos = new KRO_TareasProgramadas_Historico_Datos();
                    dnm_Valores = obj_KRO_TareasProgramadas_Historico_Datos.Obtener(_lng_id);
                }

            }
            catch (Control_Errores)
            { }
            catch (Exception)
            { }

            return dnm_Valores;
        }

        private dynamic GRABAR_REGISTRO(string _str_Opcion, dynamic _dnm_Modelo)
        {
            dynamic dnm_Valores = null;

            try
            {
                //TAREAPROGRAMADA
                if (_str_Opcion.Equals(Variables.G_STR_OPCION_KRO_TAREAPROGRAMADA))
                {
                    KRO_TareasProgramadas_Datos obj_KRO_TareasProgramadas_Datos = new KRO_TareasProgramadas_Datos();
                    dnm_Valores = obj_KRO_TareasProgramadas_Datos.Grabar(dnm_Valores);
                }
                //TAREAPROGRAMADA_Historico
                else if(_str_Opcion.Equals(Variables.G_STR_OPCION_KRO_TAREAPROGRAMADA_HISTORICO))
                {
                    KRO_TareasProgramadas_Historico_Datos obj_KRO_TareasProgramadas_Historico_Datos = new KRO_TareasProgramadas_Historico_Datos();
                    dnm_Valores = obj_KRO_TareasProgramadas_Historico_Datos.Grabar(dnm_Valores);
                }

            }
            catch (Control_Errores)
            { }
            catch (Exception)
            { }

            return dnm_Valores;
        }

        private dynamic BORRAR_REGISTRO(string _str_Opcion, long _lng_id)
        {
            dynamic dnm_Valores = null;

            try
            {
                //TAREAPROGRAMADA
                if (_str_Opcion.Equals(Variables.G_STR_OPCION_KRO_TAREAPROGRAMADA))
                {
                    KRO_TareasProgramadas_Datos obj_KRO_TareasProgramadas_Datos = new KRO_TareasProgramadas_Datos();
                    dnm_Valores = obj_KRO_TareasProgramadas_Datos.Borrar(_lng_id);

                    #region SE MODIFICO TAREA
                    KRO_TareasProgramadas_Modificadas_Datos obj_KRO_TareasProgramadas_Modificadas_Datos = new KRO_TareasProgramadas_Modificadas_Datos();
                    obj_KRO_TareasProgramadas_Modificadas_Datos.Insertar(DateTime.Now);
                    #endregion
                }
                //TAREAPROGRAMADA_Historico
                else if (_str_Opcion.Equals(Variables.G_STR_OPCION_KRO_TAREAPROGRAMADA_HISTORICO))
                {
                    KRO_TareasProgramadas_Historico_Datos obj_KRO_TareasProgramadas_Historico_Datos = new KRO_TareasProgramadas_Historico_Datos();
                    dnm_Valores = obj_KRO_TareasProgramadas_Historico_Datos.Borrar(_lng_id);
                }
            }
            catch (Control_Errores)
            { }
            catch (Exception)
            { }

            return dnm_Valores;
        }

        private dynamic OBTENER_REGISTRO_TEXTBOXBUSQUEDA(string _str_Opcion, string _str_Filtro, string _str_CampoBusqueda, long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual)
        {
            dynamic dnm_Valor = null;

            try
            {

            }
            catch (Control_Errores)
            { }
            catch (Exception)
            { }

            return dnm_Valor;
        }

        private ABS_TextBox_Busqueda OBTENCION_ABS_TEXTBOXBUSQUEDA(string _str_Opcion)
        {
            ABS_TextBox_Busqueda obj_ABS_TextBox_Busqueda = null;



            return obj_ABS_TextBox_Busqueda;
        }
    }
}
