using System;
using System.Collections.Generic;

namespace IComparable
{
	// Prosta klasa przechowywana w tablicy 
	public class Employee : IComparable<Employee>
	{
		private int empID;

		public Employee(int empID)
		{
			this.empID = empID;
		}

		public override string ToString()
		{
			return empID.ToString();
		}


		public bool Equals(Employee other)
		{
			if (this.empID == other.empID)
			{
				return true;
			}
			else
			{
				return false;
			}
		}

		// Mechanizm porównywania deleguje porównywanie z powrotem do klasy Employee.
		// Klasa Employee używa domyślnej metody
		// CompareTo dla liczb całkowitych

		public int CompareTo(Employee rhs)
		{
			return this.empID.CompareTo(rhs.empID);
		}
	}

	public class Tester
	{
		static void Main()
		{
			List<Employee> empList = new List<Employee>();
			List<Int32> intList = new List<Int32>();

			// Generowanie liczby losowe zarówno
			// dla liczb całkowitych, jak i 
			// dla identyfikatorów pracowników
			Random r = new Random();

			// Zapełnianie tablicy 
			for (int i = 0; i < 5; i++)
			{
				// Dodawanie losowego identyfikatora pracownika
				empList.Add(new Employee(r.Next(10) + 100));

				// Dodawanie losowej liczby całkowitej
				intList.Add(r.Next(10));
			}


			// Wyświetlanie całej zawartości tablicy liczb całkowitych
			Console.WriteLine("List<int> przed sortowaniem:");
			for (int i = 0; i < intList.Count; i++)
			{
				Console.Write("{0} ", intList[i].ToString());
			}
			Console.WriteLine("\n");

			// Wyświetlanie całej zawartości tablicy obiektów klasy Employee
			Console.WriteLine("List<Employee> przed sortowaniem:");
			for (int i = 0; i < empList.Count; i++)
			{
				Console.Write("{0} ", empList[i].ToString());
			}
			Console.WriteLine("\n");

			// Sortowanie i wyświetlanie elementów tablicy liczb całkowitych 
			Console.WriteLine("List<int> po sortowaniu:");
			intList.Sort();
			for (int i = 0; i < intList.Count; i++)
			{
				Console.Write("{0} ", intList[i].ToString());
			}
			Console.WriteLine("\n");

			// Sortowanie i wyświetlanie elementów tablicy obiektów klasy Employee
			Console.WriteLine("List<Employee> po sortowaniu:");
			//Employee.EmployeeComparer c = Employee.GetComparer();
			//empList.Sort(c);

			empList.Sort();


			// Wyświetlanie całej zawartości tablicy obiektów klasy Employee
			for (int i = 0; i < empList.Count; i++)
			{
				Console.Write("{0} ", empList[i].ToString());
			}
			Console.WriteLine("\n");

		}
	}
}
