#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 System;
using System.Linq;
using OpenRA.Widgets;

namespace OpenRA.Mods.Common.Widgets.Logic
{
	public class CountryTooltipLogic
	{
		[ObjectCreator.UseCtor]
		public CountryTooltipLogic(Widget widget, ButtonWidget button)
		{
			var lines = button.GetTooltipText().Replace("\\n", "\n").Split('\n');

			var header = widget.Get<LabelWidget>("HEADER");
			var headerLine = lines[0];
			var headerFont = Game.Renderer.Fonts[header.Font];
			var headerSize = headerFont.Measure(headerLine);
			header.Bounds.Width += headerSize.X;
			header.Bounds.Height += headerSize.Y;
			header.GetText = () => headerLine;

			if (lines.Length > 1)
			{
				var description = widget.Get<LabelWidget>("DESCRIPTION");
				var descriptionLines = lines.Skip(1).ToArray();
				var descriptionFont = Game.Renderer.Fonts[description.Font];
				description.Bounds.Y += header.Bounds.Y + header.Bounds.Height;
				description.Bounds.Width += descriptionLines.Select(l => descriptionFont.Measure(l).X).Max();
				description.Bounds.Height += descriptionFont.Measure(descriptionLines.First()).Y * descriptionLines.Length;
				description.GetText = () => string.Join("\n", descriptionLines);

				widget.Bounds.Width = Math.Max(header.Bounds.X + header.Bounds.Width, description.Bounds.X + description.Bounds.Width);
				widget.Bounds.Height = description.Bounds.Y + description.Bounds.Height;
			}
			else
			{
				widget.Bounds.Width = header.Bounds.X + header.Bounds.Width;
				widget.Bounds.Height = header.Bounds.Y + header.Bounds.Height;
			}
		}
	}
}