using CommonAI.Zone;
using CommonAI.Zone.EventTrigger;
using CommonFroms.G2D;
using CommonFroms.G2D.DataGrid;
using CommonFroms.Utils;
using CommonLang;
using CommonLang.Xml;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml;

namespace CommonAIEditor.Unit
{
    public class UnitEventEditor : CommonAIEditor.EventEditor.EventEditor
    {
        //----------------------------------------------------------------------------------------
        private FileInfo tree_setting_file;
        private UnitEventTemplate mData;

        public UnitEventEditor(DataManagerPanel<UnitEventTemplate> owner, UnitEventTemplate data)
        {
            this.mData = data;
            this.OnDataLoaded += UnitEventEditor_OnDataLoaded;
            this.OnDataSaved += UnitEventEditor_OnDataSaved;
            this.tree_setting_file = new FileInfo(owner.TreeRoot.SettingDir + "\\" + data.ID + ".tree");
        }

        private void UnitEventEditor_OnDataSaved(EventEditor.EventEditor obj)
        {
            try
            {
                var tree_xml = new XmlDocument();
                var eroot = tree_xml.CreateElement("root");
                tree_xml.AppendChild(eroot);
                this.SaveTreeInfo(eroot);
                var xmltext = XmlUtil.ToString(tree_xml);
                File.WriteAllText(tree_setting_file.FullName, xmltext, CUtils.UTF8);
            }
            catch (Exception) { }
        }

        private void UnitEventEditor_OnDataLoaded(EventEditor.EventEditor obj)
        {
            try
            {
                var xmltext = File.ReadAllText(tree_setting_file.FullName, CUtils.UTF8);
                var tree_xml = XmlUtil.FromString(xmltext);
                var eroot = tree_xml.DocumentElement;
                this.LoadTreeInfo(eroot);
            }
            catch (Exception) { }
        }




        public override List<IEventDataNode> LoadEventDataNodes()
        {
            this.Text = mData.ToString() + " - 事件编辑器";
            List<IEventDataNode> ret = new List<IEventDataNode>();
            ret.AddRange(mData.Events);
            return ret;
        }

        public override void OnSave(List<IEventDataNode> events)
        {
            mData.Events.Clear();
            foreach (UnitEvent evt in events)
            {
                mData.Events.Add(evt);
            }
        }

        public override IEventDataNode CreateEventDataNode()
        {
            return new UnitEvent();
        }

        public override IG2DPropertyAdapter[] CreatePropertyAdapters()
        {
            return new IG2DPropertyAdapter[] { new UnitEventAdapters(this), };
        }



        public UnitEvent ShowSelectEvent(string srcName)
        {
            UnitEvent src = mData.GetEvent(srcName);
            G2DListSelectEditor<UnitEvent> dialog = new G2DListSelectEditor<UnitEvent>(new List<UnitEvent>(mData.Events), src);
            if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                return dialog.SelectedObject;
            }
            return null;
        }


    }
}