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

namespace LanguageExtractTool
{
    public partial class LanguageMerge : Form
    {
        public LanguageMerge()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                txt_src.Text = ofd.FileName;
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(txt_src.Text))
            {
                MessageBox.Show("请选择源文件");
                return;
            }
            XmlDocument doc = new XmlDocument();
            doc.Load(txt_src.Text);
            foreach (XmlNode node in doc.DocumentElement.ChildNodes)
            {
                if (string.Equals(node.Name, "Category", StringComparison.OrdinalIgnoreCase))
                {
                    foreach (XmlNode pcode in node.ChildNodes)
                    {
                        MergeLanuageItem li = new MergeLanuageItem();
                        li.PageID = new NodeValueItem() { Name = pcode.Name, Text = pcode.InnerText };
                        foreach (XmlNode lancode in pcode.ChildNodes)
                        {
                            if (string.IsNullOrWhiteSpace(lancode.InnerText))
                            {
                                continue;
                            }
                            string lgid = lancode.Name;
                            string lgvalue = lancode.InnerText;

                            if (string.Compare(lgid, "en-us", true) == 0)
                            {
                                li.English = new NodeValueItem() { Name = "en", Text = lgvalue };
                                li.EnglishUS = new NodeValueItem() { Name = lgid, Text = lgvalue };
                            }
                            else if (string.Compare(lgid, "en-au", true) == 0)
                                li.EnglishAU = new NodeValueItem() { Name = lgid, Text = lgvalue };
                            else if (string.Compare(lgid, "en-ca", true) == 0)
                                li.EnglishCA = new NodeValueItem() { Name = lgid, Text = lgvalue };
                            else if (string.Compare(lgid, "fr-fr", true) == 0)
                            {
                                li.FranceNew = new NodeValueItem() { Name = "fr", Text = lgvalue };
                                li.France = new NodeValueItem() { Name = lgid, Text = lgvalue };
                            }
                            else if (string.Compare(lgid, "fr-ca", true) == 0)
                                li.FranceCA = new NodeValueItem() { Name = lgid, Text = lgvalue };
                            else if (string.Compare(lgid, "zh-cn", true) == 0)
                            {
                                li.Chinese = new NodeValueItem() { Name = lgid, Text = lgvalue };
                            }

                        }

                        XmlNode pagenode = doc.GetElementsByTagName(li.PageID.Name)[0];

                        XmlElement frel = doc.CreateElement("fr");
                        frel.InnerText = li.FranceNew.Text;
                        pagenode.PrependChild(frel);
                        XmlElement enel = doc.CreateElement("en");
                        enel.InnerText = li.English.Text;
                        pagenode.PrependChild(enel);

                        try
                        {
                            string rst = doc.InnerXml;
                            var url = "../" + li.PageID.Name + "/";
                            if (li.EnglishUS != null && string.Compare(li.English.Text, li.EnglishUS.Text, true) == 0)
                            {
                                var lnode = pagenode.SelectSingleNode(url + li.EnglishUS.Name);
                                pagenode.RemoveChild(lnode);
                            }
                            if (li.EnglishAU != null && string.Compare(li.English.Text, li.EnglishAU.Text, true) == 0)
                            {
                                var lnode = pagenode.SelectSingleNode(url + li.EnglishAU.Name);
                                pagenode.RemoveChild(lnode);
                            }
                            if (li.EnglishCA != null && string.Compare(li.English.Text, li.EnglishCA.Text, true) == 0)
                            {
                                var lnode = pagenode.SelectSingleNode(url + li.EnglishCA.Name);
                                pagenode.RemoveChild(lnode);
                            }
                            if (li.France != null)
                            {
                                var lnode = pagenode.SelectSingleNode(url + li.France.Name);
                                pagenode.RemoveChild(lnode);
                            }
                            if (li.FranceCA != null)
                            {
                                var lnode = pagenode.SelectSingleNode(url + li.FranceCA.Name);
                                pagenode.RemoveChild(lnode);
                            }

                        }
                        catch (Exception ex)
                        {
                            var name = li.PageID.Name;
                        }
                    }
                }
            }
            doc.Save(txt_src.Text);
            MessageBox.Show("合并完成。");
        }

        private void button4_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(txt_src.Text))
            {
                MessageBox.Show("请选择源文件");
                return;
            }
            XmlDocument doc = new XmlDocument();
            doc.Load(txt_src.Text);
            foreach (XmlNode node in doc.DocumentElement.ChildNodes)
            {
                if (string.Equals(node.Name, "Category", StringComparison.OrdinalIgnoreCase))
                {
                    foreach (XmlNode pcode in node.ChildNodes)
                    {
                        MergeLanuageItem li = new MergeLanuageItem();
                        li.PageID = new NodeValueItem() { Name = pcode.Name, Text = pcode.InnerText };
                        foreach (XmlNode lancode in pcode.ChildNodes)
                        {
                            if (string.IsNullOrWhiteSpace(lancode.InnerText))
                            {
                                continue;
                            }
                            string lgid = lancode.Name;
                            string lgvalue = lancode.InnerText;

                            //if (string.Compare(lgid, "en", true) == 0)
                            //{
                            //    li.English = new NodeValueItem() { Name = lgid, Text = lgvalue };
                            //}
                            if (string.Compare(lgid, "en-Components", true) == 0)
                            {
                                pcode.RemoveChild(lancode);
                                break;
                            }
                        }

                        //XmlNode pagenode = doc.GetElementsByTagName(li.PageID.Name)[0];

                        //XmlElement enel = doc.CreateElement("en-Components");
                        //enel.InnerText = li.English.Text;
                        //pagenode.AppendChild(enel);
                    }
                }
            }
            doc.Save(txt_src.Text);
            MessageBox.Show("添加完成。");

        }
    }

    class MergeLanuageItem
    {
        public NodeValueItem PageID { get; set; }
        public NodeValueItem English { get; set; }
        public NodeValueItem EnglishUS { get; set; }
        public NodeValueItem EnglishCA { get; set; }
        public NodeValueItem EnglishAU { get; set; }
        public NodeValueItem EnglishCOM { get; set; }
        public NodeValueItem FranceNew { get; set; }
        public NodeValueItem France { get; set; }
        public NodeValueItem FranceCA { get; set; }
        public NodeValueItem Chinese { get; set; }
    }

    class NodeValueItem
    {
        public string Name { get; set; }
        public string Text { get; set; }
    }
}