using Server;
using System;
using Server.Mobiles;

namespace Server.Engines.HuntsmasterChallenge
{
    [PropertyObject]
	public class HuntingKillEntry : IComparable
	{
		private Mobile m_Owner;
		private int m_Measurement;
		private int m_KillIndex;
		private DateTime m_DateKilled;
		private string m_Location;
		
        [CommandProperty(AccessLevel.GameMaster)]
		public Mobile Owner { get { return m_Owner; } }

        [CommandProperty(AccessLevel.GameMaster)]
		public int Measurement { get { return m_Measurement; } }

        [CommandProperty(AccessLevel.GameMaster)]
		public int KillIndex { get { return m_KillIndex; } }

        [CommandProperty(AccessLevel.GameMaster)]
		public DateTime DateKilled { get { return m_DateKilled; } }

        [CommandProperty(AccessLevel.GameMaster)]
		public string Location { get { return m_Location; } }
		
		public HuntingKillEntry(Mobile owner, int measurement, DateTime DateKilled, int killindex, string location)
		{
			m_Owner = owner;
			m_Measurement = measurement;
			m_DateKilled = DateKilled;
			m_KillIndex = killindex;
			m_Location = location;
		}
		
        public int CompareTo(object o)
        {
            if(((HuntingKillEntry)o).KillIndex == m_KillIndex || m_KillIndex < 0 || m_KillIndex >= HuntingTrophyInfo.Infos.Count)
                return ((HuntingKillEntry)o).Measurement - m_Measurement;

            HuntingTrophyInfo info1 = HuntingTrophyInfo.Infos[((HuntingKillEntry)o).KillIndex];
            HuntingTrophyInfo info2 = HuntingTrophyInfo.Infos[m_KillIndex];

            double perc1 = (double)((double)((HuntingKillEntry)o).Measurement / info1.MaxMeasurement);
            double perc2 = (double)((double)m_Measurement / info2.MaxMeasurement);

            return (int)((perc1 * 100) - (perc2 * 100));
        }

		public HuntingKillEntry(GenericReader reader)
		{
			int v = reader.ReadInt();
			
			m_Owner = reader.ReadMobile();
			m_Measurement = reader.ReadInt();
			m_DateKilled = reader.ReadDateTime();
			m_KillIndex = reader.ReadInt();
			m_Location = reader.ReadString();
		}
		
		public void Serialize(GenericWriter writer)
		{
			writer.Write((int)0);
			
			writer.Write(m_Owner);
			writer.Write(m_Measurement);
			writer.Write(m_DateKilled);
			writer.Write(m_KillIndex);
			writer.Write(m_Location);
		}
	}
}