using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using Aitex.Common.Util;
using Aitex.Core.RT.Event;
using Aitex.Core.RT.Log;
using Aitex.Core.Util;
using MECF.Framework.Common.RecipeCenter;

namespace VirgoRT.Modules.PMs
{
    public class VirgoSequenceFileContext : ISequenceFileContext
    {
        public string GetConfigXml()
        {
            try
            {
                string configContent = PathManager.GetCfgDir() + @"\SequenceFormat.xml";

                XmlDocument xmlDom = new XmlDocument();
                xmlDom.Load(configContent);

                CustomSequenceItem(xmlDom);

                return xmlDom.OuterXml;
            }
            catch (Exception ex)
            {
                LOG.Write(ex);
                return "";
            }

        }

        public virtual bool Validation(string content)
        {
            try
            {

                XmlDocument xmlDom = new XmlDocument();
                xmlDom.LoadXml(content);

                CustomValidation(xmlDom);

                return CustomValidation(xmlDom);
            }
            catch (Exception ex)
            {
                LOG.Write(ex);
                EV.PostWarningLog("Recipe", "sequence file not valid, " + ex.Message);
                return false;
            }
        }

        public bool EnableEdit(string sequencePathName)
        {
            if (Singleton<RouteManager>.Instance.CheckSequenceUsedInJob(sequencePathName))
            {
                EV.PostWarningLog("System", "Sequence is used in auto running jobs, can not be modified");
                return false;
            }
            return true;
        }

        public virtual void CustomSequenceItem(XmlDocument xmlContent)
        {

        }

        public virtual bool CustomValidation(XmlDocument xmlContent)
        {
            return true;
        }
    }
}