#region Copyright & License Information
/*
 * Copyright 2007-2022 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, either version 3 of
 * the License, or (at your option) any later version. For more
 * information, see COPYING.
 */
#endregion

using System.Linq;

namespace OpenRA.Graphics
{
	public class CursorSequence
	{
		public readonly string Name;
		public readonly int Start;
		public readonly int Length;
		public readonly string Palette;
		public readonly int2 Hotspot;

		public readonly ISpriteFrame[] Frames;

		public CursorSequence(FrameCache cache, string name, string cursorSrc, string palette, MiniYaml info)
		{
			var d = info.ToDictionary();

			Start = Exts.ParseIntegerInvariant(d["Start"].Value);
			Palette = palette;
			Name = name;

			Frames = cache[cursorSrc].Skip(Start).ToArray();

			if ((d.ContainsKey("Length") && d["Length"].Value == "*") || (d.ContainsKey("End") && d["End"].Value == "*"))
				Length = Frames.Length;
			else if (d.ContainsKey("Length"))
				Length = Exts.ParseIntegerInvariant(d["Length"].Value);
			else if (d.ContainsKey("End"))
				Length = Exts.ParseIntegerInvariant(d["End"].Value) - Start;
			else
				Length = 1;

			Frames = Frames.Take(Length).ToArray();

			if (d.ContainsKey("X"))
			{
				Exts.TryParseIntegerInvariant(d["X"].Value, out var x);
				Hotspot = Hotspot.WithX(x);
			}

			if (d.ContainsKey("Y"))
			{
				Exts.TryParseIntegerInvariant(d["Y"].Value, out var y);
				Hotspot = Hotspot.WithY(y);
			}
		}
	}
}
