using Exferia_Aplicacion.General;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;

namespace Exferia_Aplicacion.ProgramaExterno
{
    public class Funciones_DatosProgramaExterno
    {
        public static INTERNO_DatosProgramaExternoRecibidos_Modelo Cargar_XML(string _str_RutaCompleta)
        {
            INTERNO_DatosProgramaExternoRecibidos_Modelo mdl_INTERNO_DatosProgramaExternoRecibidos_Modelo = null;

            try
            {

                if (File.Exists(_str_RutaCompleta) == false)
                {
                    return mdl_INTERNO_DatosProgramaExternoRecibidos_Modelo;
                }

                //Instanciar
                mdl_INTERNO_DatosProgramaExternoRecibidos_Modelo = new INTERNO_DatosProgramaExternoRecibidos_Modelo();

                XmlDocument xDoc = new XmlDocument();
                xDoc.Load(_str_RutaCompleta);

                XmlNodeList xmllst_Configuracion = xDoc.ChildNodes;
                foreach (XmlNode xn_Principal in xmllst_Configuracion)
                {
                    //MsgExferia
                    if (xn_Principal.Name.Equals("MsgExferia"))
                    {
                        //Tiene hijos
                        if (xn_Principal.ChildNodes != null && xn_Principal.ChildNodes.Count > 0)
                        {
                            foreach (XmlNode xmlNode_Modulos in xn_Principal.ChildNodes)
                            {
                                #region GTD

                                if (xmlNode_Modulos.Name.Equals("GTD"))
                                {
                                    //Instnaciar Variables
                                    List<INTERNO_DatosProgramaExternoRecibidos_GTD_Consulta_Modelo> lst_INTERNO_DatosProgramaExternoRecibidos_GTD_Consulta_Modelo = new List<INTERNO_DatosProgramaExternoRecibidos_GTD_Consulta_Modelo>();

                                    if (xmlNode_Modulos.ChildNodes != null && xmlNode_Modulos.ChildNodes.Count > 0)
                                    {
                                        foreach (XmlNode xmlNode_Pantallas in xmlNode_Modulos.ChildNodes)
                                        {
                                            //Listados de Pantallas
                                            if (xmlNode_Pantallas.Name.Equals("consulta"))
                                            {
                                                //Si tiene hijos la pantalla
                                                if (xmlNode_Pantallas.ChildNodes != null && xmlNode_Pantallas.ChildNodes.Count > 0)
                                                {
                                                    //Instanciamos el modelo a añadir al listado final
                                                    INTERNO_DatosProgramaExternoRecibidos_GTD_Consulta_Modelo mdl_INTERNO_DatosProgramaExternoRecibidos_GTD_Consulta_Modelo = new INTERNO_DatosProgramaExternoRecibidos_GTD_Consulta_Modelo();

                                                    foreach (XmlNode xmlNode_Filtros in xmlNode_Pantallas.ChildNodes)
                                                    {
                                                        //codigoRelacional
                                                        if (xmlNode_Filtros.Name.Equals("codigoRelacional"))
                                                        {
                                                            mdl_INTERNO_DatosProgramaExternoRecibidos_GTD_Consulta_Modelo.DependenciaRelacional = xmlNode_Filtros.InnerText;
                                                        }
                                                        //etiquetas
                                                        else if (xmlNode_Filtros.Name.Equals("etiquetas"))
                                                        {
                                                            //Ver si Etiquetas tiene hijos
                                                            if (xmlNode_Filtros.ChildNodes != null && xmlNode_Filtros.ChildNodes.Count > 0)
                                                            {
                                                                //Recorrer todas las Etiquetas
                                                                foreach (XmlNode xmlNode_Etiquetas in xmlNode_Filtros.ChildNodes)
                                                                {
                                                                    if (xmlNode_Etiquetas.ChildNodes != null && xmlNode_Etiquetas.ChildNodes.Count > 0)
                                                                    {
                                                                        if (mdl_INTERNO_DatosProgramaExternoRecibidos_GTD_Consulta_Modelo.Etiquetas == null)
                                                                        {
                                                                            mdl_INTERNO_DatosProgramaExternoRecibidos_GTD_Consulta_Modelo.Etiquetas = new List<INTERNO_DatosProgramaExternoRecibidos_GTD_Consulta_Etiquetas_Modelo>();
                                                                        }

                                                                        INTERNO_DatosProgramaExternoRecibidos_GTD_Consulta_Etiquetas_Modelo mdl_INTERNO_DatosProgramaExternoRecibidos_GTD_Consulta_Etiquetas_Modelo = new INTERNO_DatosProgramaExternoRecibidos_GTD_Consulta_Etiquetas_Modelo();
                                                                        foreach (XmlNode xmlNode_Etiqueta in xmlNode_Etiquetas.ChildNodes)
                                                                        {
                                                                            //Etiqueta_ID
                                                                            if (xmlNode_Etiqueta.Name.Equals("Etiqueta_ID"))
                                                                            {
                                                                                mdl_INTERNO_DatosProgramaExternoRecibidos_GTD_Consulta_Etiquetas_Modelo.Etiqueta_ID = long.Parse(xmlNode_Etiqueta.InnerText);
                                                                            }
                                                                            //Valor
                                                                            else if (xmlNode_Etiqueta.Name.Equals("Valor"))
                                                                            {
                                                                                mdl_INTERNO_DatosProgramaExternoRecibidos_GTD_Consulta_Etiquetas_Modelo.Valor = xmlNode_Etiqueta.InnerText;
                                                                            }
                                                                        }

                                                                        mdl_INTERNO_DatosProgramaExternoRecibidos_GTD_Consulta_Modelo.Etiquetas.Add(mdl_INTERNO_DatosProgramaExternoRecibidos_GTD_Consulta_Etiquetas_Modelo);
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }

                                                    //Añadir al listado
                                                    lst_INTERNO_DatosProgramaExternoRecibidos_GTD_Consulta_Modelo.Add(mdl_INTERNO_DatosProgramaExternoRecibidos_GTD_Consulta_Modelo);
                                                }
                                            }
                                        }
                                    }

                                    //Instanciar
                                    if (lst_INTERNO_DatosProgramaExternoRecibidos_GTD_Consulta_Modelo!=null && lst_INTERNO_DatosProgramaExternoRecibidos_GTD_Consulta_Modelo.Count>0)
                                    {
                                        mdl_INTERNO_DatosProgramaExternoRecibidos_Modelo.GTD = new INTERNO_DatosProgramaExternoRecibidos_GTD_Modelo();
                                        mdl_INTERNO_DatosProgramaExternoRecibidos_Modelo.GTD.Consultas = lst_INTERNO_DatosProgramaExternoRecibidos_GTD_Consulta_Modelo;
                                    }
                                }
                                #endregion
                            }
                        }
                    }
                }
            }
            catch(Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(Funciones_DatosProgramaExterno) + "/" + nameof(Cargar_XML));
                mdl_INTERNO_DatosProgramaExternoRecibidos_Modelo = null;
            }

            return mdl_INTERNO_DatosProgramaExternoRecibidos_Modelo;
        }
    }
}
