using Exferia_Aplicacion.General;
using Exferia_Aplicacion.Visualizacion;
using Exferia_Controles;
using Exferia_EntityFramework;
using Exferia_General;
using Exferia_KairosPRO._4_Vistas.Controladoras;
using Exferia_KairosPRO.General;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Windows.Forms;
using static Exferia_Aplicacion.General.Enumerados;

namespace Exferia_KairosPRO._4_Vistas
{
    public partial class P_Incidencias : Exferia_Formularios.P_Base_Mantenimientos
    {
        #region Variables Generales
        private P_Incidencias_Controladora g_obj_Controladora;

        public bool g_bol_ConstructorPantalla_Terminado_Correctamente = true;
        public PRV_OpcionesDetalle g_mdl_PRV_Opciones_Detalle = null;

        internal List<INTERNO_Permisos_Modelo> g_lst_INTERNO_Permisos_Modelo = null;

        //Timer Buscar
        private System.Windows.Forms.Timer g_timer_Buscar_Empleados = new System.Windows.Forms.Timer();
        #endregion

        #region Objetos en Pantalla
        //Exferia_CheckBox
        internal Exferia_CheckBox Exferia_CheckBox_PalabraCompleta { get { return ex_chk_P_Incidencias_PalabraCompleta; } }
        internal Exferia_CheckBox Exferia_CheckBox_MayusculasMinusculas { get { return ex_chk_P_Incidencias_MayusculasMinusculas; } }

        //Exferia_DataGriView
        internal Exferia_DataGridView Exferia_DataGridView_Empleados { get { return ex_dgv_P_Incidencias_Empleados; } }

        //Exferia_DateTimePicker
        internal Exferia_DateTimePicker Exferia_DateTimePicker_Meses { get { return ex_dtp_P_Incidencias_Meses; } }

        //Exferia_NumericUpDown
        internal Exferia_NumericUpDown Exferia_NumericUpDown_Anyo { get { return ex_nud_P_Incidencias_Anyo; } }

        //Exferia_Panel_Degradado
        internal Exferia_Panel_Degradado Exferia_Panel_Degradado_Calendario { get { return ex_pnl_P_Incidencias_Calendario; } }

        //Exferia_TextBox
        internal Exferia_TextBox Exferia_TextBox_Buscar { get { return ex_txt_P_Incidencias_Buscar; } }

        #endregion

        #region Constructor
        public P_Incidencias(INTERNO_ValoresGenerales_Modelo _mdl_INTERNO_ValoresGenerales_Modelo, DateTime _dtt_FechaTrabajo, PRV_OpcionesDetalle _mdl_PRV_OpcionesDetalle)
        {
            InitializeComponent();

            Repintar.Empezar(this);

            //Comrpobamos que el codigo cliente exista y este bien
            if (Variables.G_LNG_IDCLIENTE_LICENCIAVALIDADO.Equals(-1))
            {
                //Tendriamos que avisar y no dejar abrir la pantalla
                Mensajes.MostrarMensaje(Mensajes.G_STR_LICENCIA_VALIDACIONES_LICENCIANOESTAACTIVA);
            }

            //Empresa Seleccionada y fecha de trabajo
            P_Base_ValoresGenerales = _mdl_INTERNO_ValoresGenerales_Modelo;
            P_Base_FechaTrabajo = _dtt_FechaTrabajo;
            
            ex_nud_P_Incidencias_Anyo.Exferia_NumericUpDown_Value = P_Base_FechaTrabajo.Year;
            ex_dtp_P_Incidencias_Meses.Exferia_DateTimePicker_Value = P_Base_FechaTrabajo;


            //Instanciar Controladora
            g_obj_Controladora = new P_Incidencias_Controladora(this);

            //Deseleccionar la row de DataGrid para cargar calendario
            ex_dgv_P_Incidencias_Empleados.ClearSelection();

            //Datos de Opciones detalle
            g_mdl_PRV_Opciones_Detalle = _mdl_PRV_OpcionesDetalle;

            //Buscar los Permisos
            g_lst_INTERNO_Permisos_Modelo = Datos_Generales.Permisos_Buscar(g_mdl_PRV_Opciones_Detalle.opcion);

            //Mirrar si hay que bloquear los controles, si solo puede ver los datos
            if ((P_Base_TipoAperturaPantalla != 0 && Datos_Generales.Permisos_Comprobar(g_mdl_PRV_Opciones_Detalle.opcion,g_lst_INTERNO_Permisos_Modelo,(int)G_ENUM_PERMISOS.Modificar,false)) == false)
            {
                //Bloquear los controles
                SoloLectura.Empezar(this,true);
            }

            ex_dtp_P_Incidencias_Meses.Enabled = true;
            //No bloqeuar el año
            ex_nud_P_Incidencias_Anyo.Exferia_NumericUpDown_ReadOnly = false;

            //Rellenar la leyenda de colores
            Rellenar_Leyenda();

            //Titulo de la Pantalla
            P_Base_TituloPantalla = g_mdl_PRV_Opciones_Detalle.descripcion_TituloMantenimiento;

            try
            {
                //Label con Empresa Seleccionada
                if (P_Base_ValoresGenerales != null)
                {
                    try
                    {
                        P_Base_Mantenimientos_InformacionEmpresaSeleccionada = P_Base_ValoresGenerales.str_Empresa_Descripcion + " - " +
                                                                "(" + P_Base_FechaTrabajo.ToString("dd/MM/yyyy") + ")";
                    }
                    catch (Exception ex)
                    {
                        //No se muestra mensaje pero se guarda en el log
                        Control_Errores.Errores_Log("", ex, nameof(P_Incidencias) + "/" + nameof(P_Incidencias));
                    }
                }
                //..................................................................................................................................

                //Bloquear pantalla hasta que termine la carga por defecto.....
                Enabled = false;
                //.............................................................

            }

            catch (Control_Errores)
            {
                g_bol_ConstructorPantalla_Terminado_Correctamente = false;
            }
            catch (Exception ex)
            {
                g_bol_ConstructorPantalla_Terminado_Correctamente = false;

                Control_Errores.Errores_Log("", ex, nameof(P_Incidencias) + "/" + nameof(P_Incidencias));
            }
            finally
            {
                //Bloquear pantalla hasta que termine la carga por defecto .............
                Enabled = true;
                //......................................................................
            }
        }
        #endregion

        #region Inicio de pantalla
        private void P_Incidencias_Load(object sender, EventArgs e)
        {
            try
            {
                //Configurar el Timer para Busqueda en el Listado #####################################################
                g_timer_Buscar_Empleados.Interval = 1000;
                g_timer_Buscar_Empleados.Tick += delegate (object s, EventArgs ee)
                {
                    g_timer_Buscar_Empleados.Stop();
                    g_obj_Controladora.Rellenar_DataGrid_Empleados(ex_txt_P_Incidencias_Buscar.Text);
                };
            }
            catch (Exception ex)
            {
                //No se muestra mensaje pero se guarda en el log
                Control_Errores.Errores_Log(ex.Message, ex, nameof(P_Incidencias) + "/" + nameof(P_Incidencias_Load));

                g_bol_ConstructorPantalla_Terminado_Correctamente = false;
            }
        }
        private void P_Incidencias_Shown(object sendern, EventArgs e)
        {
            try
            {
                g_obj_Controladora.CargaInicial(-1);
            }
            catch (Control_Errores)
            {
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA());
                Salir_P_Base();
            }
            catch (Exception ex)
            {
                //No se muestra mensaje pero se guarda en el log
                Control_Errores.Errores_Log("", ex, nameof(P_Incidencias) + "/" + nameof(P_Incidencias_Shown));

                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA());
                Salir_P_Base();
            }
        }
        #endregion

        #region Empleado
        private void ex_txt_P_Incidencias_Buscar_Exferia_TextBox_Evento_TextChanged(object sender, EventArgs e)
        {
            if (g_obj_Controladora != null)
            {
                g_timer_Buscar_Empleados.Stop();
                g_timer_Buscar_Empleados.Start();
            }
        }

        private void ex_chk_P_Incidencias_PalabraCompleta_CheckedChanged(object sender, EventArgs e)
        {
            if (g_obj_Controladora != null)
            {
                g_timer_Buscar_Empleados.Stop();
                g_timer_Buscar_Empleados.Start();
            }
        }

        private void ex_chk_P_Incidencias_MayusculasMinusculas_CheckedChanged(object sender, EventArgs e)
        {
            if (g_obj_Controladora != null)
            {
                g_timer_Buscar_Empleados.Stop();
                g_timer_Buscar_Empleados.Start();
            }
        }
        #endregion

        #region Procedimientos heredados de la clase P_Base
        public override void P_Base_ActualizarRegistro_ConObjeto(object _obj, G_ENUM_TIPOACCION _enum_TipoAccion)
        {
            try
            {
                g_obj_Controladora.CargaInicial(g_obj_Controladora.g_lng_idEmpleado_Seleccionado);
            }
            catch (Exception ex)
            {
                Mensajes.MostrarMensaje(ex.Message);
            }
        }
        #endregion

        #region Eventos
        private void ex_dtp_P_Incidencias_Meses_ValueChanged(object sender, EventArgs e)
        {
            try
            {
                if (ex_dgv_P_Incidencias_Empleados.SelectedRows.Count > 0)
                {
                    if (g_obj_Controladora != null)
                    {
                        g_obj_Controladora.g_int_Mes = ex_dtp_P_Incidencias_Meses.Exferia_DateTimePicker_Mes;

                        g_obj_Controladora.CargaInicial(g_obj_Controladora.g_lng_idEmpleado_Seleccionado);
                    }
                }
                else
                {
                    if (g_obj_Controladora != null)
                    {
                        g_obj_Controladora.Cargar_Calendario(ex_dtp_P_Incidencias_Meses.Exferia_DateTimePicker_Mes);
                    }
                }

            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Incidencias) + "/" + nameof(ex_dtp_P_Incidencias_Meses_ValueChanged));
            }
        }

        private void ex_nud_P_Incidencias_Anyo_ValueChanged(object sender, EventArgs e)
        {
            try
            {
                if (e != null)
                {
                    if (ex_dgv_P_Incidencias_Empleados.SelectedRows.Count > 0)
                    {
                        Exferia_NumericUpDown Exferia_NumericUpDown_Anyo = (Exferia_NumericUpDown)sender;
                        if (Exferia_NumericUpDown_Anyo.Exferia_NumericUpDown_Value.ToString().Trim().Length == 4)
                        {
                            int int_Anyo = Convert.ToInt32(Exferia_NumericUpDown_Anyo.Exferia_NumericUpDown_Value);

                            if (int_Anyo > 1990 && int_Anyo < 3000)
                            {
                                g_obj_Controladora.CargaInicial(g_obj_Controladora.g_lng_idEmpleado_Seleccionado);
                            }
                        }
                    }
                    else
                    {
                        if (g_obj_Controladora != null)
                        {
                            if (g_obj_Controladora.g_bol_Termino_CargaInicial)
                            {
                                Exferia_NumericUpDown Exferia_NumericUpDown_Anyo = (Exferia_NumericUpDown)sender;
                                if (Exferia_NumericUpDown_Anyo.Exferia_NumericUpDown_Value.ToString().Trim().Length == 4)
                                {
                                    int int_Anyo = Convert.ToInt32(Exferia_NumericUpDown_Anyo.Exferia_NumericUpDown_Value);
                                    if (int_Anyo > 1990 && int_Anyo < 3000)
                                    {
                                        g_obj_Controladora.CargaInicial(ex_dtp_P_Incidencias_Meses.Exferia_DateTimePicker_Mes);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log(ex.Message,ex,nameof(P_Incidencias)+"/"+nameof(ex_nud_P_Incidencias_Anyo_ValueChanged));
            }
        }

        private void ex_dgv_P_Incidencias_Empleados_SelectionChanged(object sender, EventArgs e)
        {
            try
            {
                if (g_obj_Controladora!=null && 
                    g_obj_Controladora.g_bol_Termino_CargaInicial &&
                    g_obj_Controladora.g_bol_Cargando_Empleados==false)
                {
                    if (ex_dgv_P_Incidencias_Empleados.SelectedRows.Count > 0)
                    {
                        g_obj_Controladora.g_int_Mes = ex_dtp_P_Incidencias_Meses.Exferia_DateTimePicker_Mes;

                      
                        g_obj_Controladora.ActualizarDatos(long.Parse(ex_dgv_P_Incidencias_Empleados.SelectedRows[0].Cells[0].Value.ToString()));
                    }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Incidencias) + "/" + nameof(ex_dgv_P_Incidencias_Empleados_SelectionChanged));
            }
        }
        #endregion

        #region Abrir Fichajes
        private void Abrir_Fichajes(object sender, INTERNO_EventArgs e)
        {
            if (g_obj_Controladora!=null)
            {
                g_obj_Controladora.Abrir_Fichajes(e.NumeroObjeto);
            }
        }
        #endregion

        #region Rellenar Leyenda
        private void Rellenar_Leyenda()
        {
            //Dia Fichajes Sin Validar
            ex_pnl_P_Incidencias_Dia_Fichajes_SinValidar.Exferia_Panel_Degradado_Color_Desde = Colores.G_COLOR_KAIROSPRO_FICHAJE_DIA_SINVALIDAR;
            ex_pnl_P_Incidencias_Dia_Fichajes_SinValidar.Exferia_Panel_Degradado_Color_Hasta = Colores.G_COLOR_KAIROSPRO_FICHAJE_DIA_SINVALIDAR;
            ex_pnl_P_Incidencias_Dia_Fichajes_SinValidar.Exferia_Panel_Degradado_Color_Borde = Colores.G_COLOR_KAIROSPRO_FICHAJE_BORDE_CELDA;

            //Dia Fichajes Validado Sin Incidencias
            ex_pnl_P_Incidencias_Dia_Fichajes_ValidadosSinIncidencias.Exferia_Panel_Degradado_Color_Desde = Colores.G_COLOR_KAIROSPRO_FICHAJE_DIA_VALIDADO_SININCIDENCIAS;
            ex_pnl_P_Incidencias_Dia_Fichajes_ValidadosSinIncidencias.Exferia_Panel_Degradado_Color_Hasta = Colores.G_COLOR_KAIROSPRO_FICHAJE_DIA_VALIDADO_SININCIDENCIAS;
            ex_pnl_P_Incidencias_Dia_Fichajes_ValidadosSinIncidencias.Exferia_Panel_Degradado_Color_Borde = Colores.G_COLOR_KAIROSPRO_FICHAJE_BORDE_CELDA;

            //Dia Fichajes Validado Con Incidencias
            ex_pnl_P_Incidencias_Dia_Fichajes_ValidadosConIncidencias.Exferia_Panel_Degradado_Color_Desde = Colores.G_COLOR_KAIROSPRO_FICHAJE_DIA_VALIDADO_CONINCIDENCIAS;
            ex_pnl_P_Incidencias_Dia_Fichajes_ValidadosConIncidencias.Exferia_Panel_Degradado_Color_Hasta = Colores.G_COLOR_KAIROSPRO_FICHAJE_DIA_VALIDADO_CONINCIDENCIAS;
            ex_pnl_P_Incidencias_Dia_Fichajes_ValidadosConIncidencias.Exferia_Panel_Degradado_Color_Borde = Colores.G_COLOR_KAIROSPRO_FICHAJE_BORDE_CELDA;


            //Dia sin Fichajes
            ex_pnl_P_Incidencias_Dia_Sin_Fichajes.Exferia_Panel_Degradado_Color_Desde = Colores.G_COLOR_KAIROSPRO_FICHAJE_DIA_SINFICHAJES;
            ex_pnl_P_Incidencias_Dia_Sin_Fichajes.Exferia_Panel_Degradado_Color_Hasta = Colores.G_COLOR_KAIROSPRO_FICHAJE_DIA_SINFICHAJES;
            ex_pnl_P_Incidencias_Dia_Sin_Fichajes.Exferia_Panel_Degradado_Color_Borde = Colores.G_COLOR_KAIROSPRO_FICHAJE_BORDE_CELDA;

            //Dia Vacio
            ex_pnl_P_Incidencias_Dia_Vacio.Exferia_Panel_Degradado_Color_Desde = Colores.G_COLOR_KAIROSPRO_FICHAJE_DIA_VACIO;
            ex_pnl_P_Incidencias_Dia_Vacio.Exferia_Panel_Degradado_Color_Hasta = Colores.G_COLOR_KAIROSPRO_FICHAJE_DIA_VACIO;
            ex_pnl_P_Incidencias_Dia_Vacio.Exferia_Panel_Degradado_Color_Borde = Colores.G_COLOR_KAIROSPRO_FICHAJE_BORDE_CELDA;


        }

        #endregion

       
    }
}
