using System;
using System.IO;
using System.Linq;
using System.Xml.Linq;

// This file is part of the ANX.Framework created by the
// "ANX.Framework developer group" and released under the Ms-PL license.
// For details see: http://anxframework.codeplex.com/license

namespace ProjectConverter.Platforms
{
	public class LinuxConverter : Converter
	{
		public override string Postfix
		{
			get { return "Linux"; }
		}

        public override string Name
        {
            get { return "linux"; }
        }

		#region ConvertImport
		protected override void ConvertImport(XElement element, XAttribute projectAttribute)
		{
			if (projectAttribute != null &&
				(projectAttribute.Value.EndsWith(XnaGameStudioTarget) ||
				projectAttribute.Value.EndsWith(XnaPipelineExtensionTarget)))
			{
				element.Remove();
			}
		}
		#endregion

        private string[] referencesToRemove = new string[] { "ANX.RenderSystem.Windows.DX10",
                                                             "ANX.RenderSystem.Windows.DX11",
                                                             "XInput",
                                                             "XAudio",
                                                             "SharpDX",
                                                             "ANX.PlatformSystem.Windows",
                                                           };

        #region ConvertReference
        protected override void ConvertReference(XElement element)
        {
            XAttribute includeAttribute = element.Attribute("Include");
            if (includeAttribute != null)
            {
                string value = includeAttribute.Value;
                foreach (var reference in referencesToRemove)
                {
                    if (value.ToLowerInvariant().Contains(reference.ToLowerInvariant()))
                    {
                        element.Remove();
                        break;
                    }
                }
            }
        }
        #endregion

        #region ConvertReference
        protected override void ConvertProjectReference(XElement element)
        {
            XAttribute includeAttribute = element.Attribute("Include");
            if (includeAttribute != null)
            {
                string value = includeAttribute.Value;
                foreach (var reference in referencesToRemove)
                {
                    if (value.ToLowerInvariant().Contains(reference.ToLowerInvariant()))
                    {
                        element.Remove();
                        break;
                    }
                }
            }
        }
        #endregion

        #region ConvertMainPropertyGroup
        protected override void ConvertMainPropertyGroup(XElement element)
		{
			DeleteNodeIfExists(element, "ProjectTypeGuids");
			DeleteNodeIfExists(element, "TargetFrameworkProfile");

			XElement outputTypeNode = GetOrCreateNode(element, "OutputType");
			if (outputTypeNode.Value == "WinExe" ||
				outputTypeNode.Value == "appcontainerexe")
			{
				outputTypeNode.Value = "Exe";
			}
			else if (String.IsNullOrEmpty(outputTypeNode.Value))
			{
				outputTypeNode.Value = "Library";
			}
		}
		#endregion
	}
}