#region Copyright & License Information
/*
 * Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
 * This file is part of OpenRA, which is free software. It is made
 * available to you under the terms of the GNU General Public License
 * as published by the Free Software Foundation. For more information,
 * see COPYING.
 */
#endregion

using OpenRA.Traits;

namespace OpenRA.Mods.Common.Traits
{
	[Desc("Shown in the build palette widget.")]
	public class TooltipInfo : ITraitInfo, ITooltipInfo
	{
		[Translate] public readonly string Description = "";
		[Translate] public readonly string Name = "";

		[Desc("An optional generic name (i.e. \"Soldier\" or \"Structure\")" +
			"to be shown to chosen players.")]
		[Translate] public readonly string GenericName = null;

		[Desc("Prefix generic tooltip name with 'Enemy' or 'Allied'.")]
		public readonly bool GenericStancePrefix = true;

		[Desc("Player stances that the generic name should be shown to.")]
		public readonly Stance GenericVisibility = Stance.None;

		[Desc("Show the actor's owner and their faction flag")]
		public readonly bool ShowOwnerRow = true;

		[Desc("Sequence of the actor that contains the cameo.")]
		public readonly string Icon = "icon";

		public virtual object Create(ActorInitializer init) { return new Tooltip(init.self, this); }

		public string TooltipForPlayerStance(Stance stance)
		{
			if (stance == Stance.None || !GenericVisibility.HasFlag(stance))
				return Name;

			if (GenericStancePrefix && stance == Stance.Ally)
				return "Allied " + GenericName;

			if (GenericStancePrefix && stance == Stance.Enemy)
				return "Enemy " + GenericName;

			return GenericName;
		}

		public bool IsOwnerRowVisible { get { return ShowOwnerRow; } }
	}

	public class Tooltip : IToolTip
	{
		readonly Actor self;
		readonly TooltipInfo info;

		public ITooltipInfo TooltipInfo { get { return info; } }
		public Player Owner { get { return self.Owner; } }

		public Tooltip(Actor self, TooltipInfo info)
		{
			this.self = self;
			this.info = info;
		}
	}
}