using Exferia_Aplicacion.General;
using Exferia_Aplicacion.Visualizacion;
using Exferia_EntityFramework;
using Exferia_Formularios;
using Exferia_General;
using Exferia_KairosPRO.General;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Reflection;
using System.Text;
using System.Windows.Forms;

namespace Exferia_KairosPRO._4_Vistas
{
    public partial class P_Utilidades_Exferia : Exferia_Formularios.P_Base_Mantenimientos
    {
        #region Constructor
        public P_Utilidades_Exferia(INTERNO_ValoresGenerales_Modelo _mdl_INTERNO_ValoresGenerales_Modelo, DateTime _dtt_FechaTrabajo, PRV_OpcionesDetalle _mdl_PRV_OpcionesDetalle)
        {
            InitializeComponent();

            try
            {
                Repintar.Empezar(this);

                CheckForIllegalCrossThreadCalls = false;

                //Empresa seleccionada y fecha de trabajo ....................................................
                P_Base_ValoresGenerales = _mdl_INTERNO_ValoresGenerales_Modelo;
                P_Base_FechaTrabajo = _dtt_FechaTrabajo;

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

                // 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.Message, ex, nameof(P_Utilidades_Exferia) + "/" + nameof(P_Utilidades_Exferia));
                    }
                }
                //....................................................................................................

                //Bloquear pantalla hasta que termine la carga por defecto .....
                Enabled = false;
                //.............................................................
            }
            catch (Control_Errores)
            { }
            catch (Exception ex)
            {
                //No se muestra mensaje pero se guarda en el log
                Control_Errores.Errores_Log("", ex, nameof(P_Utilidades_Exferia) + "/" + nameof(P_Utilidades_Exferia));
            }
            finally
            {
                //Bloquear pantalla hasta que termine la carga por defecto .....
                Enabled = true;
                //.............................................................
            }
        }
        #endregion

        #region Botones
        private void ex_btn_P_Utilidades_Exferia_GeneracionFichajeAutomaticos_Click(object sender, EventArgs e)
        {
            GeneracionFichajesAutomaticos();
        }
        private void GeneracionFichajesAutomaticos()
        {
            try
            {
                INTERNO_OpcionesDetalle_Modelo mdl_INTERNO_OpcionesDetalle_Modelo = Datos_Generales.PRV_Opciones_Buscar_Detalles(Variables.G_STR_OPCION_KRS_FICHAJESAUTOMATICOS_GENERACION);
                if (mdl_INTERNO_OpcionesDetalle_Modelo != null)
                {

                    //Cargamos el ensamblado
                    Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_KAIROSPRO + ".dll");
                    //Obtenemos el tipo de la clase
                    Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_KAIROSPRO + "." + Variables.G_STR_LIBRERIA_OPCIONES);
                    //creamos la instancia
                    var obj_Clase = Activator.CreateInstance(m_type);
                    //Cargamos el metodo solicitado
                    MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_OPCIONES_PROCEDIMIENTO_MOSTRAR_EN_MANTENIMIENTO, BindingFlags.Instance | BindingFlags.NonPublic);

                    //Obtener valores
                    object[] arr_Parametros = { mdl_INTERNO_OpcionesDetalle_Modelo.opcion, null, null, Variables.G_MDL_INTERNO_VALORESGENERALES_MODELO, Variables.G_DTT_FECHA_INICIAL_PORDEFECTO, mdl_INTERNO_OpcionesDetalle_Modelo, -1, "", "", null, null };
                    //Pasamos los parametros al metodo y lo ejecutamos
                    obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Utilidades_Exferia) + "/" + nameof(GeneracionFichajesAutomaticos));
            }
        }
        #endregion


    }
}