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

namespace Gestor_de_Contenidos
{
    public class NivelColaboracion : Nivel
    {
        private List<ItemColaboracion> items;
        public List<ItemColaboracion> Items
        {
            get { return items; }
            set { items = value; }
        }
        public NivelColaboracion()
            : base()
        {
            items = new List<ItemColaboracion>();
        }

        public bool anyadirItem(ItemColaboracion item) { 
        
            // Se asegura de que no exista uno con el mismo nombre
            foreach (ItemColaboracion it in items){
                if (it.Nombre.Equals(item.Nombre))
                    return false;

            }

            items.Add(item);
            return true;        
        
        }


        public ItemColaboracion buscarItem(string nombre) {

            foreach (ItemColaboracion it in items)
            {
                if (it.Nombre.Equals(nombre))
                    return it;

            }

            return null;
        
        }

        public ItemColaboracion buscarItem(int posicion)
        {

            foreach (ItemColaboracion it in items)
            {
                if (it.Posicion == posicion)
                    return it;

            }

            return null;

        }

        public bool borrarItem(ItemColaboracion item) {

            // A todos los items con una posicion superior, les quita una posicion para que no queden espacios
            foreach (ItemColaboracion it in items) {

                if (it.Posicion > item.Posicion)
                    it.Posicion -= 1;
            }
            
            return items.Remove(item); 
        
        
        
        }
        
        
        public override bool estaImplementado()
        {
            if ((items.Count == 0) || (nombre == null) || (nombre.Equals("")) || (texto == null) || (texto.Equals("")) || tieneImagenFondo() && ((fondo == null) || (fondo.Equals(""))) || (!tieneImagenFondo() && colorFondo == 0))
                return false;
            else
                return true;
        }

        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", "colaboracion");
            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 (ItemColaboracion it in Items)
            {
                myXmlTextWriter.WriteStartElement("item");
                myXmlTextWriter.WriteAttributeString("nombre", it.Nombre);
                if (!esEdicion)
                {
                    myXmlTextWriter.WriteAttributeString("imagen", ruta + nombreArchivo(it.Imagen));
                    moverImagen(it.Imagen, ruta + nombreArchivo(it.Imagen));
                    myXmlTextWriter.WriteAttributeString("imagenConstruida", ruta + nombreArchivo(it.ImagenConstruida));
                    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("imagenConstruida", ruta_edicion + nombreArchivo(it.ImagenConstruida));
                    moverImagen(it.ImagenConstruida, ruta + nombreArchivo(it.ImagenConstruida));
                }

                myXmlTextWriter.WriteAttributeString("frase", it.FrasePedir);
                myXmlTextWriter.WriteAttributeString("posicion", it.Posicion.ToString());
                myXmlTextWriter.WriteEndElement();
            }
            myXmlTextWriter.WriteEndElement();

            myXmlTextWriter.WriteEndElement();
            myXmlTextWriter.Flush();
            myXmlTextWriter.Close();

            if (siguienteNivel != null)
                siguienteNivel.escribirXML(esEdicion);
        }
    }
}
