using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;

namespace Gestor_de_Contenidos
{
    public class CargadorXML
    
    {
        String tipo_nivel;
        String nombre_nivel;
        String path_xml;

        public CargadorXML(String tipo_nivel, String nombre_nivel) {

            this.tipo_nivel = tipo_nivel;
            this.nombre_nivel = nombre_nivel;

            cargarPath();      
        
        }

        private void cargarPath()
        {
            if (tipo_nivel.Equals("Clasificador")) 
            {
                path_xml = frm_principal.getInstance().Path_base + "Clasificadores\\" + nombre_nivel + "\\index.xml";
            }

            if (tipo_nivel.Equals("Ordenacion")) 
            {
                path_xml = frm_principal.getInstance().Path_base + "Ordenadores\\" + nombre_nivel + "\\index.xml";
            }

            if (tipo_nivel.Equals("Historia Social"))
            {
                path_xml = frm_principal.getInstance().Path_base + "Historias\\" + nombre_nivel + "\\index.xml";
            }
        }

        public Nivel carga() {

            if (tipo_nivel.Equals("Clasificador"))
                return cargarClasificador();
            if (tipo_nivel.Equals("Ordenacion"))
                return cargarOrdenacion();
            if (tipo_nivel.Equals("Historia Social"))
                return cargarHS();

            return null;
        
        }

        private NivelMJOrdenacion cargarOrdenacion()
        {
            NivelMJOrdenacion mjOrdenacion;
            String nombre, texto, fondo,tipo_fondo;
            XmlDocument xDoc = new XmlDocument();
            xDoc.Load(path_xml);
            
            XmlNodeList xnl_nivel = xDoc.GetElementsByTagName("nivel");
            tipo_fondo= xnl_nivel[0].Attributes.GetNamedItem("tipo_fondo").InnerText.Trim();
            nombre = xnl_nivel[0].Attributes.GetNamedItem("nombre").InnerText.Trim();
            texto = xnl_nivel[0].Attributes.GetNamedItem("texto").InnerText.Trim();
            fondo = xnl_nivel[0].Attributes.GetNamedItem("fondo").InnerText.Trim();
            mjOrdenacion = new NivelMJOrdenacion();
            mjOrdenacion.Nombre = nombre;
            if (tipo_fondo.Equals("imagen"))
                mjOrdenacion.Fondo = fondo;
            else
                mjOrdenacion.ColorFondo = int.Parse(fondo);
            mjOrdenacion.Texto = texto;


            XmlNodeList xnl_items = xDoc.GetElementsByTagName("item");

            foreach (XmlElement xe_item in xnl_items)
            {
                
                String it_nombre = xe_item.Attributes.GetNamedItem("nombre").InnerText.Trim();
                String it_imagen = xe_item.Attributes.GetNamedItem("imagen").InnerText.Trim();
                String it_texto = xe_item.Attributes.GetNamedItem("texto").InnerText.Trim();
                String it_posicion = xe_item.Attributes.GetNamedItem("posicion").InnerText.Trim();

                ItemOrdenacion it = new ItemOrdenacion(it_nombre, it_texto, it_imagen);
                it.Posicion = int.Parse(it_posicion);

                mjOrdenacion.Items.Add(it);
            }


            return mjOrdenacion;
            

        }

        private NivelMJClasificacion cargarClasificador()
        {
            NivelMJClasificacion mjClasificacion;
            String nombre, texto, fondo,tipo_fondo;
            XmlDocument xDoc = new XmlDocument();
            xDoc.Load(path_xml);

            XmlNodeList xnl_nivel = xDoc.GetElementsByTagName("nivel");
            nombre = xnl_nivel[0].Attributes.GetNamedItem("nombre").InnerText.Trim();
            texto = xnl_nivel[0].Attributes.GetNamedItem("texto").InnerText.Trim();
            tipo_fondo = xnl_nivel[0].Attributes.GetNamedItem("tipo_fondo").InnerText.Trim();
            fondo = xnl_nivel[0].Attributes.GetNamedItem("fondo").InnerText.Trim();
            mjClasificacion = new NivelMJClasificacion();
            mjClasificacion.Nombre = nombre;
            if (tipo_fondo.Equals("imagen"))
                mjClasificacion.Fondo = fondo;
            else
                mjClasificacion.ColorFondo = int.Parse(fondo);
            mjClasificacion.Texto = texto;

            XmlNodeList xnl_categorias = xDoc.GetElementsByTagName("clasificador");

            foreach (XmlElement xe_item in xnl_categorias)
            {

                String it_nombre = xe_item.Attributes.GetNamedItem("nombre").InnerText.Trim();
                String it_imagen = xe_item.Attributes.GetNamedItem("imagen").InnerText.Trim();
                String it_texto = xe_item.Attributes.GetNamedItem("texto").InnerText.Trim();

                ItemCategoria it = new ItemCategoria(it_nombre, it_texto, it_imagen);

                mjClasificacion.ItemsCategorias.Add(it);
            }


            XmlNodeList xnl_items = xDoc.GetElementsByTagName("item");

            foreach (XmlElement xe_item in xnl_items)
            {

                String it_nombre = xe_item.Attributes.GetNamedItem("nombre").InnerText.Trim();
                String it_imagen = xe_item.Attributes.GetNamedItem("imagen").InnerText.Trim();
                String it_texto = xe_item.Attributes.GetNamedItem("texto").InnerText.Trim();
                String it_categoria = xe_item.Attributes.GetNamedItem("categoria").InnerText.Trim();

                ItemClasificacion it = new ItemClasificacion(it_nombre, it_texto, it_imagen);
                it.Categoria = mjClasificacion.buscarItemCategoria(it_categoria);

                mjClasificacion.Items.Add(it);
            }


            return mjClasificacion;
        }

        private NivelHistoriaSocial cargarHS()
        {
            NivelHistoriaSocial nivelHS;
            String nombre, texto;
            XmlDocument xDoc = new XmlDocument();
            xDoc.Load(path_xml);

            XmlNodeList xnl_nivel = xDoc.GetElementsByTagName("nivel");
            nombre = xnl_nivel[0].Attributes.GetNamedItem("nombre").InnerText.Trim();
            texto = xnl_nivel[0].Attributes.GetNamedItem("texto").InnerText.Trim();
            nivelHS = new NivelHistoriaSocial();
            nivelHS.Nombre = nombre;
            nivelHS.Texto = texto;

            return nivelHS;
        }

    }
}
