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

namespace Gestor_de_Contenidos
{
    public class NivelEleccionLibre : Nivel
    {
        private List<ItemEleccionLibre> elecciones;
        public List<ItemEleccionLibre> Elecciones {
            get { return elecciones; }
            set { elecciones = value; }
        }
        
        public NivelEleccionLibre() : base() {

            elecciones = new List<ItemEleccionLibre>();
        
        }

        public bool eliminarEleccion(ItemEleccionLibre i)
        {

            return elecciones.Remove(i);

                
        }

        public bool anyadirEleccion(ItemEleccionLibre item)
        {

            // Se asegura de que no exista uno con el mismo nombre o con el siguiente nivel con el mismo nombre
            foreach (ItemEleccionLibre it in elecciones)
            {
                if (it.Nombre.Equals(item.Nombre))
                    return false;
                if(it.SiguienteNivel.Nombre.Equals(item.SiguienteNivel.Nombre))
                    return false;

            }

            elecciones.Add(item);
            return true;

        }

        public ItemEleccionLibre buscarEleccion(string nombre)
        {

            foreach (ItemEleccionLibre it in elecciones)
            {
                if (it.Nombre.Equals(nombre))
                    return it;

            }

            return null;

        }


        public ItemEleccionLibre buscarEleccion(Nivel nivel)
        {

            foreach (ItemEleccionLibre it in elecciones)
            {
                if (it.SiguienteNivel.Equals(nivel))
                    return it;

            }

            return null;

        }

        public override bool estaImplementado()
        {
            if (!nombre.Equals("") && !texto.Equals("") && ((tieneImagenFondo() && !fondo.Equals(""))||(!tieneImagenFondo()&&colorFondo!=0)) && elecciones.Count > 0)
                return true;
            else
                return false;
        }


        public override void escribirXML(bool esEdicion)
        {
            string ruta = obtenerRutaNivel();
            string ruta_edicion = "";
            if (esEdicion)
                ruta_edicion = obtenerRutaEdicion();
            System.IO.Directory.CreateDirectory(ruta);
            XmlTextWriter myXmlTextWriter = new XmlTextWriter(ruta + "index.xml", System.Text.Encoding.UTF8);
            myXmlTextWriter.WriteStartDocument(false);
            myXmlTextWriter.Formatting = Formatting.Indented;


            myXmlTextWriter.WriteStartElement("nivel");
            myXmlTextWriter.WriteAttributeString("tipo", "eleccion libre");
            myXmlTextWriter.WriteAttributeString("nombre", Nombre);
            myXmlTextWriter.WriteAttributeString("texto", Texto);

            if (!esEdicion)
            {
                if (tieneImagenFondo())
                {
                    myXmlTextWriter.WriteAttributeString("tipo_fondo", "imagen");
                    myXmlTextWriter.WriteAttributeString("fondo", ruta + nombreArchivo(Fondo));
                    moverImagen(Fondo, ruta + nombreArchivo(Fondo));
                }
                else
                {

                    myXmlTextWriter.WriteAttributeString("tipo_fondo", "color");
                    myXmlTextWriter.WriteAttributeString("fondo", colorFondo.ToString());
                }
            }
            else
            {
                if (tieneImagenFondo())
                {
                    myXmlTextWriter.WriteAttributeString("tipo_fondo", "imagen");
                    myXmlTextWriter.WriteAttributeString("fondo", ruta_edicion + nombreArchivo(Fondo));
                    moverImagen(Fondo, ruta + nombreArchivo(Fondo));
                }
                else
                {

                    myXmlTextWriter.WriteAttributeString("tipo_fondo", "color");
                    myXmlTextWriter.WriteAttributeString("fondo", colorFondo.ToString());
                }
            }

            myXmlTextWriter.WriteStartElement("items");
            foreach (ItemEleccionLibre it in elecciones)
            {
                myXmlTextWriter.WriteStartElement("eleccion");
                myXmlTextWriter.WriteAttributeString("nombre", it.Nombre);
                
                if (!esEdicion)
                {
                    myXmlTextWriter.WriteAttributeString("imagen", ruta + nombreArchivo(it.Imagen));
                    moverImagen(it.Imagen, ruta + nombreArchivo(it.Imagen));
                }

                else
                {
                     myXmlTextWriter.WriteAttributeString("imagen", ruta_edicion + nombreArchivo(it.Imagen));
                     moverImagen(it.Imagen, ruta + nombreArchivo(it.Imagen));
                }
                
                myXmlTextWriter.WriteAttributeString("texto", it.Texto);
                if(!esEdicion)
                    myXmlTextWriter.WriteAttributeString("rutaSiguiente", it.SiguienteNivel.obtenerRutaNivel());
                else
                    myXmlTextWriter.WriteAttributeString("rutaSiguiente", it.SiguienteNivel.obtenerRutaEdicion());
                myXmlTextWriter.WriteEndElement();
            }
            myXmlTextWriter.WriteEndElement();
            myXmlTextWriter.WriteEndElement();
            myXmlTextWriter.Flush();
            myXmlTextWriter.Close();


            foreach (ItemEleccionLibre it in elecciones)
            {
                if(it.SiguienteNivel!=null)
                    it.SiguienteNivel.escribirXML(esEdicion);
            }
        }
        



    }
}
