using System.Xml;
using System;

namespace Wayne.Lib.Log
{
    /// <summary>
    /// Output
    /// </summary>
    public abstract class LogConfigOutput : ICloneable
    {
        internal abstract void WriteXml(XmlWriter xmlWriter);

        internal static LogConfigOutput Create(XmlNode outputNode, string ns)
        {
            XmlNode parameterNode = outputNode["Parameters"];
            if (parameterNode != null)
            {
                string type = outputNode.Attributes["Type"].Value;
                switch (type)
                {
                    case LogConfigTextFileOutput.XmlType: return new LogConfigTextFileOutput(parameterNode, ns);
                    case LogConfigEventLogSubscriptionOutput.XmlType: return new LogConfigEventLogSubscriptionOutput(parameterNode, ns);
                    case LogConfigExternalLogWriterOutput.XmlType: return new LogConfigExternalLogWriterOutput(parameterNode, ns);
                }
            }
            return null;
        }

        /// <summary>
        /// Clones the object
        /// </summary>
        /// <returns></returns>
        public abstract object Clone();
    }
}