using Exferia_Aplicacion.General;
using Exferia_Aplicacion.Modelos_Maestros;
using Exferia_Maestros._1_Datos;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace Exferia_Maestros.General
{
    public class Funciones_Maestros
    {
        #region Sincronizar KairosPro
        public static INTERNO_ValorDevuelto_Modelo Sincronizacion_Empleados_Con_KairosPro(BackgroundWorker _obj_TareaAsincrona_ParaProgress,
                                                                                   string _str_Opcion,
                                                                                   INTERNO_ValoresGenerales_Modelo _mdl_INTERNO_ValoresGenerales_Modelo,
                                                                                   List<long> _lst_idEmpleados)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;
            MAE_Empleados_Datos obj_MAE_Empleados_Datos = new MAE_Empleados_Datos();

            try
            {
                List<INTERNO_MAE_Empleado_AUXILIAR> lst_INTERNO_MAE_Empleados_AUXILIAR = null;
                //Obtenemos un listado de los empleados seleccionados en el listado con su foto
                lst_INTERNO_MAE_Empleados_AUXILIAR = obj_MAE_Empleados_Datos.Obtener_ListadoConFoto(_lst_idEmpleados);

                foreach (INTERNO_MAE_Empleado_AUXILIAR mdl_INTERNO_MAE_Empleado_AUXILIAR in lst_INTERNO_MAE_Empleados_AUXILIAR)
                {
                    //Sincronizaremos los empleados en kairos
                    //Cargamos el ensamblado #########################################################################################################################################################################
                    Assembly m_assembly_1 = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_KAIROSPRO + ".dll");
                    //Obtenemos el tipo de la clase
                    Type m_type_1 = m_assembly_1.GetType("" + Variables.G_STR_LIBRERIA_KAIROSPRO + "." + Variables.G_STR_LIBRERIA_DATOSKAIROSPRO);
                    //creamos la instancia
                    var obj_Clase_1 = Activator.CreateInstance(m_type_1);
                    //Cargamos el metodo solicitado
                    MethodInfo obj_MethodInfo_1 = obj_Clase_1.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSKAIROSPRO_PROCEDIMIENTO_KRSEMPLEADOS_INSERTAROACTUALIZAR_POR_MODELO, BindingFlags.Instance | BindingFlags.NonPublic);

                    //Obtener valores
                    object[] arr_Parametros_1 = { mdl_INTERNO_MAE_Empleado_AUXILIAR };

                    //Pasamos los parametros al metodo y lo ejecutamos
                    obj_MethodInfo_1.Invoke(obj_Clase_1, arr_Parametros_1);
                    //##################################################################################################################################################################################################

                    //una vez sincronizado actualizamos el campo SincronizarConKairos
                    obj_MAE_Empleados_Datos.ActualizarCampo_Sincronizacion_KairosPro(mdl_INTERNO_MAE_Empleado_AUXILIAR);
                }
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_KAIROSPRO_ERROR_SINCRONIZAR_EMPLEADOS();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log(ex.Message, ex, nameof(Funciones_Maestros) + "/" + nameof(Sincronizacion_Empleados_Con_KairosPro));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_KAIROSPRO_ERROR_SINCRONIZAR_EMPLEADOS();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        #endregion
    }
}
