using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Exferia_Aplicacion.General;
using Exferia_Aplicacion.Visualizacion;
using Exferia_KairosPRO._1_Modelos;
using Exferia_KairosPRO_EF;
using Exferia_KairosPRO.General;

namespace Exferia_KairosPRO._4_Vistas.ControlesPersonalizados_DentroPaneles
{
    public partial class CTU_P_ArbolJerarquico_AusenciasProgramadasTipos : UserControl
    {
        #region Variables Privadas
        private INTERNO_ValoresGenerales_Modelo g_mdl_INTERNO_ValoresGenerales_Modelo = null;
        private DateTime g_dtt_FechaTrabajo;
        #endregion

        #region Constructor
        public CTU_P_ArbolJerarquico_AusenciasProgramadasTipos(INTERNO_ValoresGenerales_Modelo _mdl_INTERNO_ValoresGenerales_Modelo, DateTime _dtt_FechaTrabajo)
        {
            InitializeComponent();

            g_mdl_INTERNO_ValoresGenerales_Modelo = _mdl_INTERNO_ValoresGenerales_Modelo;
            g_dtt_FechaTrabajo = _dtt_FechaTrabajo;

            CargarGruposTabs();

            Repintar.Empezar(this);
        }
        #endregion

        #region Cargar Grupos en Tabs
        private void CargarGruposTabs()
        {
            try
            {
                //Solicitud
                CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos obj_CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos_Solicitud = new CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos(g_mdl_INTERNO_ValoresGenerales_Modelo, g_dtt_FechaTrabajo,true);
                obj_CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos_Solicitud.Location = new Point(2, 2);
                obj_CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos_Solicitud.Size = new Size(ex_tbc_AusenciasProgramadasTipos.Width - 4, ex_tbc_AusenciasProgramadasTipos.Height - 4);
                obj_CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos_Solicitud.Anchor = AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom | AnchorStyles.Left;
                tbp_Solicitud.Controls.Add(obj_CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos_Solicitud);

                //Respuesta
                CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos_Respuesta = new CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos(g_mdl_INTERNO_ValoresGenerales_Modelo, g_dtt_FechaTrabajo, false);
                CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos_Respuesta.Location = new Point(2, 2);
                CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos_Respuesta.Size = new Size(ex_tbc_AusenciasProgramadasTipos.Width - 4, ex_tbc_AusenciasProgramadasTipos.Height - 4);
                CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos_Respuesta.Anchor = AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom | AnchorStyles.Left;
                tbp_Respuesta.Controls.Add(CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos_Respuesta);

                //Resultado
                CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos obj_CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos_Resultado = new CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos(g_mdl_INTERNO_ValoresGenerales_Modelo, g_dtt_FechaTrabajo, true);
                obj_CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos_Resultado.Location = new Point(2, 2);
                obj_CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos_Resultado.Size = new Size(ex_tbc_AusenciasProgramadasTipos.Width - 4, ex_tbc_AusenciasProgramadasTipos.Height - 4);
                obj_CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos_Resultado.Anchor = AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom | AnchorStyles.Left;
                tbp_Resultado.Controls.Add(obj_CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos_Resultado);

            }
            catch(Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_ArbolJerarquico_AusenciasProgramadasTipos) + "/" + nameof(CargarGruposTabs));
            }
        }
        #endregion

        public void Empleados_BorrarQueNoSonSupervisores(long _lng_idEmpleado, List<long> _lst_idEmpleadosPadres)
        {
            try
            {
                //Solicitud
                ((CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos)tbp_Solicitud.Controls[0]).Grupo_Empleados_Borrar_QueNoSonSupervisores(_lng_idEmpleado, _lst_idEmpleadosPadres);
                ((CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos)tbp_Solicitud.Controls[0]).Grupo_Redimensionar_Paneles(null, true, 0);

                //Respuesta
                ((CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos)tbp_Respuesta.Controls[0]).Grupo_Empleados_Borrar_QueNoSonSupervisores(_lng_idEmpleado, _lst_idEmpleadosPadres);
                ((CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos)tbp_Respuesta.Controls[0]).Grupo_Redimensionar_Paneles(null, true, 0);
                
                //Resultado
                ((CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos)tbp_Resultado.Controls[0]).Grupo_Empleados_Borrar_QueNoSonSupervisores(_lng_idEmpleado, _lst_idEmpleadosPadres);
                ((CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos)tbp_Resultado.Controls[0]).Grupo_Redimensionar_Paneles(null, true, 0);
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_ArbolJerarquico_AusenciasProgramadasTipos) + "/" + nameof(Empleados_BorrarQueNoSonSupervisores));
            }
        }

        public void EmpleadoSeleccionadoArbol_Actualizar(INTERNO_KRS_Empleados_Modelo _mdl_INTERNO_KRS_Empleados_Modelo)
        {
            try
            {
                //Solicitud
                ((CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos)tbp_Solicitud.Controls[0]).EmpleadoSeleccionadoArbol_Actualizar(_mdl_INTERNO_KRS_Empleados_Modelo);

                //Respuesta
                ((CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos)tbp_Respuesta.Controls[0]).EmpleadoSeleccionadoArbol_Actualizar ( _mdl_INTERNO_KRS_Empleados_Modelo);

                //Resultado
                ((CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos)tbp_Resultado.Controls[0]).EmpleadoSeleccionadoArbol_Actualizar(_mdl_INTERNO_KRS_Empleados_Modelo);
            }
            catch(Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_ArbolJerarquico_AusenciasProgramadasTipos) + "/" + nameof(EmpleadoSeleccionadoArbol_Actualizar));
            }
        }

        public void Vaciar()
        {
            try
            {
                //Solicitud
                ((CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos)tbp_Solicitud.Controls[0]).Vaciar();

                //Respuesta
                ((CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos)tbp_Respuesta.Controls[0]).Vaciar();

                //Resultado
                ((CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos)tbp_Resultado.Controls[0]).Vaciar();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_ArbolJerarquico_AusenciasProgramadasTipos) + "/" + nameof(Vaciar));
            }
        }

        public void Grabar(long _lng_idEmpleado,long _lng_idAusenciaProgramadaTipo)
        {
            
            try
            {
                //Solicitud
                ((CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos)tbp_Solicitud.Controls[0]).Grabar(_lng_idEmpleado,_lng_idAusenciaProgramadaTipo, Variables_KairosPRO.G_INT_ARBOLJERARQUICO_GRUPOS_TIPO_SOLICITUD);

                //Respuesta
                ((CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos)tbp_Respuesta.Controls[0]).Grabar(_lng_idEmpleado, _lng_idAusenciaProgramadaTipo, Variables_KairosPRO.G_INT_ARBOLJERARQUICO_GRUPOS_TIPO_RESPUESTA);

                //Resultado
                ((CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos)tbp_Resultado.Controls[0]).Grabar(_lng_idEmpleado, _lng_idAusenciaProgramadaTipo, Variables_KairosPRO.G_INT_ARBOLJERARQUICO_GRUPOS_TIPO_RESULTADO);

            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(CTU_P_ArbolJerarquico_AusenciasProgramadasTipos) + "/" + nameof(Grabar), true);
            }
        }

        public void Grupos_CargarDiccionario_Desde_BaseDatos(long _lng_idEmpleado, List<KRS_ArbolJerarquico_Grupos> _lst_KRS_ArbolJerarquico_Grupos,List<KRS_ArbolJerarquico_Grupos_Empleados> _lst_KRS_ArbolJerarquico_Grupos_Empleados)
        {
            try
            {
                if (_lst_KRS_ArbolJerarquico_Grupos!=null && _lst_KRS_ArbolJerarquico_Grupos.Count>0)
                {
                    //Solicitud
                    List<KRS_ArbolJerarquico_Grupos> lst_KRS_ArbolJerarquico_Grupos_SOLICITUD = _lst_KRS_ArbolJerarquico_Grupos.Where(m => m.tipo.Equals(Variables_KairosPRO.G_INT_ARBOLJERARQUICO_GRUPOS_TIPO_SOLICITUD)).ToList();
                    ((CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos)tbp_Solicitud.Controls[0]).Grupos_CargarDiccionario_Desde_BaseDatos(_lng_idEmpleado, lst_KRS_ArbolJerarquico_Grupos_SOLICITUD, _lst_KRS_ArbolJerarquico_Grupos_Empleados);

                    //Respuesta
                    List<KRS_ArbolJerarquico_Grupos> lst_KRS_ArbolJerarquico_Grupos_RESPUESTA = _lst_KRS_ArbolJerarquico_Grupos.Where(m => m.tipo.Equals(Variables_KairosPRO.G_INT_ARBOLJERARQUICO_GRUPOS_TIPO_RESPUESTA)).ToList();
                    ((CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos)tbp_Respuesta.Controls[0]).Grupos_CargarDiccionario_Desde_BaseDatos(_lng_idEmpleado, lst_KRS_ArbolJerarquico_Grupos_RESPUESTA, _lst_KRS_ArbolJerarquico_Grupos_Empleados);

                    //Resultado
                    List<KRS_ArbolJerarquico_Grupos> lst_KRS_ArbolJerarquico_Grupos_RESULTADO = _lst_KRS_ArbolJerarquico_Grupos.Where(m => m.tipo.Equals(Variables_KairosPRO.G_INT_ARBOLJERARQUICO_GRUPOS_TIPO_RESULTADO)).ToList();
                    ((CTU_P_ArbolJerarquico_AusenciasProgramadasTipos_Grupos)tbp_Resultado.Controls[0]).Grupos_CargarDiccionario_Desde_BaseDatos(_lng_idEmpleado, lst_KRS_ArbolJerarquico_Grupos_RESULTADO, _lst_KRS_ArbolJerarquico_Grupos_Empleados);
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_ArbolJerarquico_AusenciasProgramadasTipos) + "/" + nameof(Grupos_CargarDiccionario_Desde_BaseDatos));
            }
        }

    }
}
