using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Gestor_de_Contenidos
{
    public partial class uc_modificar_niveles : uc_base
    {
        private string nombre_juego_seleccionado;
        private string tipo_juego_seleccionado;
        private CargadorXML carga;
        Nivel nivelSeleccionado;

        public uc_modificar_niveles()
        {
            InitializeComponent();
        }

        private void uc_modificar_niveles_Load(object sender, EventArgs e)
        {
            frm_principal.getInstance().borrarCarpetasObsoletas();
            
            cargarClasificadores();
            cargarOrdenadores();
            cargarHistorias();

        }

        /* Carga los clasificadores en el ListView */
        private void cargarClasificadores()
        {
            string[] carpetas = System.IO.Directory.GetDirectories(frm_principal.getInstance().Path_base + "Clasificadores");
            foreach (string juego in carpetas)
            {
                string[] aux = juego.Split('\\');
                ListViewItem lvi = new ListViewItem(aux[aux.Length - 1]);
                lvi.SubItems.Add("Clasificador");
                lv_juegos.Items.Add(lvi);

            }

        }

        /* Carga los Ordenadores en el ListView */
        private void cargarOrdenadores()
        {
            string[] carpetas = System.IO.Directory.GetDirectories(frm_principal.getInstance().Path_base + "Ordenadores");
            foreach (string juego in carpetas)
            {
                string[] aux = juego.Split('\\');
                ListViewItem lvi = new ListViewItem(aux[aux.Length - 1]);
                lvi.SubItems.Add("Ordenacion");
                lv_juegos.Items.Add(lvi);

            }
        }

        /* Carga las Historias Sociales en el ListView */
        private void cargarHistorias()
        {
            string[] carpetas = System.IO.Directory.GetDirectories(frm_principal.getInstance().Path_base + "Historias");
            foreach (string juego in carpetas)
            {
                string[] aux = juego.Split('\\');
                if (!aux[aux.Length - 1].Contains("--deprecated--"))
                {
                    ListViewItem lvi = new ListViewItem(aux[aux.Length - 1]);
                    lvi.SubItems.Add("Historia Social");
                    lv_juegos.Items.Add(lvi);
                }

            }
        }

        private void cb_hs_CheckedChanged(object sender, EventArgs e)
        {
            cargaTablaSegun();
        }

        private void cb_mjc_CheckedChanged(object sender, EventArgs e)
        {
            cargaTablaSegun();
        }

        private void cb_mjo_CheckedChanged(object sender, EventArgs e)
        {
            cargaTablaSegun();
        }

        /* Cargamos tablas teniendo en cuenta los check boxes seleccionados */
        private void cargaTablaSegun()
        {
            lv_juegos.Items.Clear();
            if (cb_mjo.Checked)
                cargarOrdenadores();
            if (cb_mjc.Checked)
                cargarClasificadores();
            if (cb_hs.Checked)
                cargarHistorias();
        }

        private void lv_juegos_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (lv_juegos.SelectedItems.Count > 0)
            {
                ListViewItem itNombre = lv_juegos.SelectedItems[0];
                nombre_juego_seleccionado = itNombre.Text;
                tipo_juego_seleccionado = lv_juegos.SelectedItems[0].SubItems[1].Text;
                btn_editar.Enabled = true;
                carga = new CargadorXML(tipo_juego_seleccionado, nombre_juego_seleccionado);
                nivelSeleccionado = carga.carga();
                tb_descripcion.Text = nivelSeleccionado.Texto;
            }

            else
            {

                btn_editar.Enabled = false;

            }
        }

        private void btn_cancelar_Click(object sender, EventArgs e)
        {
            frm_principal.getInstance().cambiarPantalla(new uc_pantalla_principal());
        }

        private void btn_editar_Click(object sender, EventArgs e)
        {
            if (nivelSeleccionado != null) { 
            
                if (nivelSeleccionado.GetType().Equals(new NivelMJClasificacion().GetType()))
                {
                    uc_nuevo_mc nmjc = new uc_nuevo_mc();
                    nmjc.setNivel((NivelMJClasificacion)nivelSeleccionado);
                    frm_principal.getInstance().cambiarPantalla(nmjc);
                }

                if (nivelSeleccionado.GetType().Equals(new NivelMJOrdenacion().GetType()))
                {
                    uc_nuevo_mo nmjo = new uc_nuevo_mo();
                    nmjo.setNivel((NivelMJOrdenacion)nivelSeleccionado);
                    frm_principal.getInstance().cambiarPantalla(nmjo);
                
                }

                if (nivelSeleccionado.GetType().Equals(new NivelHistoriaSocial().GetType()))
                {
                    
                    frm_principal.getInstance().EsEdicionHistoria = true;
                    CargadorHistoriaXML cargador = new CargadorHistoriaXML(nivelSeleccionado.Nombre);
                    NivelHistoriaSocial hs=(NivelHistoriaSocial) cargador.cargar();
                    //Vaciamos los campos por si hay algo
                    frm_principal.getInstance().Tv_histora.Nodes.Clear();
                    frm_principal.getInstance().Dic_historia.Clear();
                    //Lo rellenamos con lo que obtenemos
                    frm_principal.getInstance().Tv_histora.Nodes.Add(cargador.Nodo_raiz);
                    frm_principal.getInstance().Dic_historia = cargador.Diccionario;
                    frm_principal.getInstance().Nombre_histora_antes_edicion = hs.Nombre;
                    uc_nueva_hs nhs = new uc_nueva_hs();
                    frm_principal.getInstance().cambiarPantalla(nhs);

                }
            }
        }

        private void btn_eliminar_Click(object sender, EventArgs e)
        {
            if (nivelSeleccionado != null)
            {

              if( DialogResult.Yes == MessageBox.Show("Esta seguro que desea eliminar el juego " + nivelSeleccionado.Nombre + "?", "Eliminar Juego", MessageBoxButtons.YesNo,MessageBoxIcon.Question)){
                if (nivelSeleccionado.GetType().Equals(new NivelMJClasificacion().GetType()))
                {
                    try
                    {
                        System.IO.Directory.Delete(frm_principal.getInstance().Path_base + "Clasificadores\\" + nivelSeleccionado.Nombre,true);
                        cargaTablaSegun();
                    }
                    catch (Exception) { }
                }

                if (nivelSeleccionado.GetType().Equals(new NivelMJOrdenacion().GetType()))
                {
                    try
                    {
                        System.IO.Directory.Delete(frm_principal.getInstance().Path_base + "Ordenadores\\" + nivelSeleccionado.Nombre,true);
                        cargaTablaSegun();
                    }
                    catch (Exception) { }

                }

                if (nivelSeleccionado.GetType().Equals(new NivelHistoriaSocial().GetType()))
                {

                    try
                    {
                        System.IO.Directory.Delete(frm_principal.getInstance().Path_base + "Historias\\" + nivelSeleccionado.Nombre,true);
                        cargaTablaSegun();
                        
                    }
                    catch (Exception) { }

                }

                // Se pone a null para que si se vuelve a hacer click no se intente eliminar nada.
                nivelSeleccionado = null;
                nombre_juego_seleccionado = "";
            }
            }
        }

        private void lv_juegos_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            if (nivelSeleccionado != null)
            {

                if (nivelSeleccionado.GetType().Equals(new NivelMJClasificacion().GetType()))
                {
                    uc_nuevo_mc nmjc = new uc_nuevo_mc();
                    nmjc.setNivel((NivelMJClasificacion)nivelSeleccionado);
                    frm_principal.getInstance().cambiarPantalla(nmjc);
                }

                if (nivelSeleccionado.GetType().Equals(new NivelMJOrdenacion().GetType()))
                {
                    uc_nuevo_mo nmjo = new uc_nuevo_mo();
                    nmjo.setNivel((NivelMJOrdenacion)nivelSeleccionado);
                    frm_principal.getInstance().cambiarPantalla(nmjo);

                }

                if (nivelSeleccionado.GetType().Equals(new NivelHistoriaSocial().GetType()))
                {

                    frm_principal.getInstance().EsEdicionHistoria = true;
                    CargadorHistoriaXML cargador = new CargadorHistoriaXML(nivelSeleccionado.Nombre);
                    NivelHistoriaSocial hs = (NivelHistoriaSocial)cargador.cargar();
                    //Vaciamos los campos por si hay algo
                    frm_principal.getInstance().Tv_histora.Nodes.Clear();
                    frm_principal.getInstance().Dic_historia.Clear();
                    //Lo rellenamos con lo que obtenemos
                    frm_principal.getInstance().Tv_histora.Nodes.Add(cargador.Nodo_raiz);
                    frm_principal.getInstance().Dic_historia = cargador.Diccionario;
                    frm_principal.getInstance().Nombre_histora_antes_edicion = hs.Nombre;
                    uc_nueva_hs nhs = new uc_nueva_hs();
                    frm_principal.getInstance().cambiarPantalla(nhs);

                }
            }
        }
    }
}
