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

namespace Gestor_de_Contenidos
{
    public partial class frm_nueva_eleccion_libre : Form
    {
        private Nivel nivel_nuevo;
        private Nivel nivel_el;
        private Nivel nivel_antes_editar;

        private TreeNode treeNode;
        private ItemEleccionLibre item;
        private bool esEdicion;

        public frm_nueva_eleccion_libre(Nivel nivel_el, TreeNode treeNode)
        {
            InitializeComponent();
            this.nivel_el = nivel_el;
            this.treeNode = treeNode;
            esEdicion = false;
        }

        private void btn_siguiente_nivel_Click(object sender, EventArgs e)
        {
            if (!tb_nombre.Text.Equals(""))
            {
                form_nuevo_nivel_hs frm = new form_nuevo_nivel_hs();
                frm.setNombreNivel(tb_nombre.Text);
                if (!esEdicion)
                {
                    if (frm.ShowDialog() == DialogResult.OK)
                    {
                        nivel_nuevo = frm.getNivel();
                        //Actualizamos el nivel anterior.
                        nivel_nuevo.NivelAnterior = nivel_el;
                        tb_desc_sn.Text = nivel_nuevo.Texto;
                        tb_tipo_sn.Text = nivel_nuevo.GetType().ToString();
                        tb_titulo_sn.Text = nivel_nuevo.Nombre;

                    }
                }
                else
                {

                    if (item.SiguienteNivel.SiguienteNivel == null)
                    {

                        if (frm.ShowDialog() == DialogResult.OK)
                        {
                            nivel_nuevo = frm.getNivel();
                            //Actualizamos el nivel anterior.
                            nivel_nuevo.NivelAnterior = nivel_el;
                            tb_desc_sn.Text = nivel_nuevo.Texto;
                            tb_tipo_sn.Text = nivel_nuevo.GetType().ToString();
                            tb_titulo_sn.Text = nivel_nuevo.Nombre;

                        }

                    }
                    else
                        MessageBox.Show("El item ya tiene niveles siguientes. No se puede cambiar el siguiente nivel.", "Siguientes niveles existentes", MessageBoxButtons.OK, MessageBoxIcon.Information);

                }
            }
            else {
                MessageBox.Show("Rellene antes el nombre de la elección.", "Rellene nombre", MessageBoxButtons.OK, MessageBoxIcon.Hand);
            
            }
        }

        private void btn_cancelar_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.Cancel;
            this.Close();
        }

        private void btn_guardar_Click(object sender, EventArgs e)
        {
            
            
            if (tb_imagen.Text.Equals("") || tb_text.Text.Equals("") || tb_nombre.Text.Equals("") || nivel_nuevo==null)
                lbl_rellena.Visible = true;
            else
            {

                if (esEdicion)
                {
                    if (!nivel_antes_editar.Equals(nivel_nuevo))
                    {

                        TreeNode tnHijos;
                        TreeNode tnode = new TreeNode();
                        foreach (TreeNode t in treeNode.Nodes)
                        {
                            Nivel n;
                            frm_principal.getInstance().Dic_historia.TryGetValue(t, out n);
                            if (n.Equals(item.SiguienteNivel))
                            {
                                tnode = t;
                                frm_principal.getInstance().Dic_historia.Remove(t);
                            }
                        }

                        tnHijos = tnode.FirstNode;
                        if (tnHijos != null)
                        {
                            tnHijos.ExpandAll();
                            tnHijos.Expand();
                        }
                        treeNode.Nodes.Remove(tnode);



                        // Segun del tipo que sea el nivel, lo aadimos al arbol
                        if (nivel_nuevo.GetType().Equals(new NivelExplicacion().GetType()))
                        {
                            TreeNode tn = new TreeNode(nivel_nuevo.Nombre + " (Exp)");
                            tn.BackColor = Color.Yellow;
                            if (tnHijos != null)
                            {
                                tn.Nodes.Add(tnHijos);
                                tn.Expand();
                                tn.ExpandAll();
                            }
                            frm_principal.getInstance().Dic_historia.Add(tn, (NivelExplicacion)nivel_nuevo);
                            treeNode.Nodes.Add(tn);
                            treeNode.Expand();
                        }
                        else if (nivel_nuevo.GetType().Equals(new NivelEleccionUnica().GetType()))
                        {
                            TreeNode tn = new TreeNode(nivel_nuevo.Nombre + " (E.U.)");
                            tn.BackColor = Color.Yellow;
                            if (tnHijos != null)
                            {
                                tn.Nodes.Add(tnHijos);
                                tn.Expand();
                                tn.ExpandAll();
                            }
                            frm_principal.getInstance().Dic_historia.Add(tn, (NivelEleccionUnica)nivel_nuevo);
                            treeNode.Nodes.Add(tn);
                            treeNode.Expand();
                        }
                        else if (nivel_nuevo.GetType().Equals(new NivelOrdenacion().GetType()))
                        {
                            TreeNode tn = new TreeNode(nivel_nuevo.Nombre + " (Ord)");
                            tn.BackColor = Color.Yellow;
                            if (tnHijos != null)
                            {
                                tn.Nodes.Add(tnHijos);
                                tn.Expand();
                                tn.ExpandAll();
                            }
                            frm_principal.getInstance().Dic_historia.Add(tn, (NivelOrdenacion)nivel_nuevo);
                            treeNode.Nodes.Add(tn);
                            treeNode.Expand();
                        }
                        else if (nivel_nuevo.GetType().Equals(new NivelClasificacion().GetType()))
                        {
                            TreeNode tn = new TreeNode(nivel_nuevo.Nombre + " (Clas)");
                            tn.BackColor = Color.Yellow;
                            if (tnHijos != null)
                            {
                                tn.Nodes.Add(tnHijos);
                                tn.Expand();
                                tn.ExpandAll();
                            }
                            frm_principal.getInstance().Dic_historia.Add(tn, (NivelClasificacion)nivel_nuevo);
                            treeNode.Nodes.Add(tn);
                            treeNode.Expand();
                        }
                        else if (nivel_nuevo.GetType().Equals(new NivelColaboracion().GetType()))
                        {
                            TreeNode tn = new TreeNode(nivel_nuevo.Nombre + " (Col)");
                            tn.BackColor = Color.Yellow;
                            if (tnHijos != null)
                            {
                                tn.Nodes.Add(tnHijos);
                                tn.Expand();
                                tn.ExpandAll();
                            }
                            frm_principal.getInstance().Dic_historia.Add(tn, (NivelColaboracion)nivel_nuevo);
                            treeNode.Nodes.Add(tn);
                            treeNode.Expand();
                        }
                        else if (nivel_nuevo.GetType().Equals(new NivelEleccionLibre().GetType()))
                        {
                            TreeNode tn = new TreeNode(nivel_nuevo.Nombre + " (E.L.)");
                            tn.BackColor = Color.Yellow;
                            if (tnHijos != null)
                            {
                                tn.Nodes.Add(tnHijos);
                                tn.Expand();
                                tn.ExpandAll();
                            }
                            frm_principal.getInstance().Dic_historia.Add(tn, (NivelEleccionLibre)nivel_nuevo);
                            treeNode.Nodes.Add(tn);
                            treeNode.Expand();
                        }

                    }

                }
                else
                {
                    // Segun del tipo que sea el nivel, lo aadimos al arbol
                    if (nivel_nuevo.GetType().Equals(new NivelExplicacion().GetType()))
                    {
                        TreeNode tn = new TreeNode(nivel_nuevo.Nombre + " (Exp)");
                        tn.BackColor = Color.Yellow;
                        frm_principal.getInstance().Dic_historia.Add(tn, (NivelExplicacion)nivel_nuevo);
                        treeNode.Nodes.Add(tn);
                        treeNode.Expand();
                    }
                    else if (nivel_nuevo.GetType().Equals(new NivelEleccionUnica().GetType()))
                    {
                        TreeNode tn = new TreeNode(nivel_nuevo.Nombre + " (E.U.)");
                        tn.BackColor = Color.Yellow;
                        frm_principal.getInstance().Dic_historia.Add(tn, (NivelEleccionUnica)nivel_nuevo);
                        treeNode.Nodes.Add(tn);
                        treeNode.Expand();
                    }
                    else if (nivel_nuevo.GetType().Equals(new NivelOrdenacion().GetType()))
                    {
                        TreeNode tn = new TreeNode(nivel_nuevo.Nombre + " (Ord)");
                        tn.BackColor = Color.Yellow;
                        frm_principal.getInstance().Dic_historia.Add(tn, (NivelOrdenacion)nivel_nuevo);
                        treeNode.Nodes.Add(tn);
                        treeNode.Expand();
                    }
                    else if (nivel_nuevo.GetType().Equals(new NivelClasificacion().GetType()))
                    {
                        TreeNode tn = new TreeNode(nivel_nuevo.Nombre + " (Clas)");
                        tn.BackColor = Color.Yellow;
                        frm_principal.getInstance().Dic_historia.Add(tn, (NivelClasificacion)nivel_nuevo);
                        treeNode.Nodes.Add(tn);
                        treeNode.Expand();
                    }
                    else if (nivel_nuevo.GetType().Equals(new NivelColaboracion().GetType()))
                    {
                        TreeNode tn = new TreeNode(nivel_nuevo.Nombre + " (Col)");
                        tn.BackColor = Color.Yellow;
                        frm_principal.getInstance().Dic_historia.Add(tn, (NivelColaboracion)nivel_nuevo);
                        treeNode.Nodes.Add(tn);
                        treeNode.Expand();
                    }
                    else if (nivel_nuevo.GetType().Equals(new NivelEleccionLibre().GetType()))
                    {
                        TreeNode tn = new TreeNode(nivel_nuevo.Nombre + " (E.L.)");
                        tn.BackColor = Color.Yellow;
                        frm_principal.getInstance().Dic_historia.Add(tn, (NivelEleccionLibre)nivel_nuevo);
                        treeNode.Nodes.Add(tn);
                        treeNode.Expand();
                    }
                }

                item = new ItemEleccionLibre(tb_nombre.Text, tb_text.Text, tb_imagen.Text,nivel_nuevo);
                this.DialogResult = DialogResult.OK;
                this.Close();
            }
        }

        private void btn_buscar_imagen_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                tb_imagen.Text = openFileDialog1.FileName;
            }
        }

        public ItemEleccionLibre getItem() { return item; }

        public void setItem(ItemEleccionLibre it)
        {
            this.item = it;
            tb_text.Text = item.Texto;
            tb_nombre.Text = item.Nombre;
            tb_imagen.Text = item.Imagen;
            nivel_nuevo = it.SiguienteNivel;
            tb_desc_sn.Text = nivel_nuevo.Texto;
            tb_tipo_sn.Text = nivel_nuevo.GetType().ToString();
            tb_titulo_sn.Text = nivel_nuevo.Nombre;
            esEdicion = true;
            nivel_antes_editar = nivel_nuevo;
        }

        private void tb_imagen_TextChanged(object sender, EventArgs e)
        {
            if (tb_imagen.Text.Equals(""))
                pb_imagen.Visible = false;
            else
            {
                pb_imagen.Visible = true;
                pb_imagen.Image = Image.FromFile(tb_imagen.Text);
                pb_imagen.Image = pb_imagen.Image.GetThumbnailImage(pb_imagen.Width, pb_imagen.Height, null, new System.IntPtr());


            }
        }

        private void tb_nombre_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsNumber(e.KeyChar))
            {
                e.Handled = false;

            }
            else
            {
                e.Handled = true;
            }
        }

    }
}
