using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Patcher.Data.Patch
{
	public class PatchId : IComparable<PatchId>, IComparable, IFormattable
	{
		
		public readonly int version;
		public readonly string name;
		
		public PatchId(int version, string name)
		{
			this.version = version;
			this.name = name;
		}

		private int _CompareTo(PatchId other)
		{
			int result = this.version.CompareTo(other.version);
			if(result == 0)
			{
				result = this.name.CompareTo(other.name);
			}
			return result;
		}

		int IComparable<PatchId>.CompareTo(PatchId other)
		{
			return this._CompareTo(other);
		}

		int IComparable.CompareTo(object obj)
		{
			if(obj is PatchId)
			{
				return this._CompareTo((PatchId)obj);
			}
			throw new ApplicationException("Cannot compare PatchId to " + obj.GetType());
		}
		
		public string ToString(string format, IFormatProvider formatProvider)
		{
		
			if(String.IsNullOrEmpty(format)) return this.ToString();
		
			switch(format.ToLower())
			{
				case "version":
					return this.version.ToString(formatProvider);
				case "name":
					return this.name.ToString(formatProvider);
				default:
					throw new ApplicationException(String.Format("Unknown format {0}", format));
			}
		}
	}
}
