using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Xml;

namespace TIAOpennessGenerator
{
    class HMI
    {
        XmlNode Screen;
        String NameScreen;
        //XmlNode TagList;
        //String NameTagTable;

        //public String TagTableFile { get { return NameTagTable + ".xml"; } }
        public String ScreenFile { get { return NameScreen + ".xml"; } }

        /// <summary>
        /// Konstruktor
        /// </summary>
        /// <param name="aScreen">XmlNode z předpisu se screenem</param>
        /// <param name="aNameScreen">Jméno screenu</param>
        public HMI(XmlNode aScreen, string aNameScreen)
        {
            this.Screen = aScreen;
            this.NameScreen = aNameScreen;
        }

        /// <summary>
        /// Vytvoření XML souboru obsahující Screen dle XML předpisu
        /// </summary>
        private void WriteScreen()
        {
            XmlDocument FileScreen = new XmlDocument();
            string Path = Receipt.PathSource + this.Screen.Name + ".xml";
            FileScreen.Load(Path);

            //Vyhleda vsechny Nody Tag
            XmlNodeList GraficObjects = FileScreen.SelectNodes("//Tag/*");
            //Vyhleda vsechny Nody Value
            XmlNodeList GraficValues = FileScreen.SelectNodes("//Value/*");

            //Vyhledá Atributelist ve vzorovém filu, jenž obsahaje jméno a číslo screenu
            XmlNode PropertyScreen = FileScreen.SelectSingleNode("//Hmi.Screen.Screen/AttributeList");

            //Přepsání Jména a čísla Obrazovky
            PropertyScreen["Name"].InnerText = this.NameScreen;
            PropertyScreen["Number"].InnerText = this.Screen.Attributes["Postfix"].Value;

            XmlNodeList Variables = this.Screen.FirstChild.ChildNodes;

            //Přepsání všech proměnných v XMLScreen
            foreach (XmlNode Variable in Variables)
            {
                foreach (XmlNode GrafOb in GraficObjects)
                {
                    if (GrafOb.InnerText == Variable.InnerText)
                        GrafOb.InnerText = Variable.Attributes["TagName"].Value;
                }
                foreach (XmlNode GrafVal in GraficValues)
                {
                    string a = GrafVal.InnerText;
                    if (GrafVal.InnerText == Variable.InnerText)
                        GrafVal.InnerText = Variable.Attributes["TagName"].Value;
                }
            }



            FileScreen.Save(Receipt.PathObject + ScreenFile);
        }

        /// <summary>
        /// Volání metody pro vytvoření screenu
        /// </summary>
        public void Process()
        {
            //WriteTagTable();
            WriteScreen();            
        }

    }
}
