using System;
using Server;
using Server.Items;
using Server.Mobiles;

namespace Server.Engines.Quests.Ninja
{
	public class FindEminoBeginObjective : QuestObjective
	{
		public override object Message
		{
			get
			{
				// Your value as a Ninja must be proven. Find Daimyo Emino and accept the test he offers.
				return 1063174;
			}
		}

		public FindEminoBeginObjective()
		{
		}

		public override void OnComplete()
		{
			System.AddConversation( new FindZoelConversation() );
		}
	}

	public class FindZoelObjective : QuestObjective
	{
		public override object Message
		{
			get
			{
				// Find Elite Ninja Zoel immediately!
				return 1063176;
			}
		}

		public FindZoelObjective()
		{
		}

		public override void OnComplete()
		{
			System.AddConversation( new EnterCaveConversation() );
		}
	}

	public class EnterCaveObjective : QuestObjective
	{
		public override object Message
		{
			get
			{
				// Enter the cave and walk through it. You will be tested as you travel along the path.
				return 1063179;
			}
		}

		public EnterCaveObjective()
		{
		}

		public override void CheckProgress()
		{
			if ( System.From.Map == Map.Malas && System.From.InRange( new Point3D( 406, 1141, 0 ), 2 ) )
				Complete();
		}

		public override void OnComplete()
		{
			System.AddConversation( new SneakPastGuardiansConversation() );
		}
	}

	public class SneakPastGuardiansObjective : QuestObjective
	{
		private bool m_TaughtHowToUseSkills;

		public bool TaughtHowToUseSkills
		{
			get{ return m_TaughtHowToUseSkills; } 
			set{ m_TaughtHowToUseSkills = value; }
		}

		public override object Message
		{
			get
			{
				// Use your Ninja training to move invisibly past the magical guardians.
				return 1063261;
			}
		}

		public SneakPastGuardiansObjective()
		{
		}

		public override void CheckProgress()
		{
			if ( System.From.Map == Map.Malas && System.From.InRange( new Point3D( 412, 1123, 0 ), 3 ) )
				Complete();
		}

		public override void OnComplete()
		{
			System.AddConversation( new UseTeleporterConversation() );
		}

		public override void ChildDeserialize( GenericReader reader )
		{
			int version = reader.ReadEncodedInt();

			m_TaughtHowToUseSkills = reader.ReadBool();
		}

		public override void ChildSerialize( GenericWriter writer )
		{
			writer.WriteEncodedInt( (int) 0 ); // version

			writer.Write( (bool) m_TaughtHowToUseSkills );
		}
	}

	public class UseTeleporterObjective : QuestObjective
	{
		public override object Message
		{
			get
			{
				/* The special tile is known as a teleporter.
				 * Step on the teleporter tile and you will be transported to a new location.
				 */
				return 1063183;
			}
		}

		public UseTeleporterObjective()
		{
		}

		public override void OnComplete()
		{
			System.AddConversation( new GiveZoelNoteConversation() );
		}
	}

	public class GiveZoelNoteObjective : QuestObjective
	{
		public override object Message
		{
			get
			{
				/* Bring the note to Elite Ninja Zoel and speak with him again. 
				 * He is near the cave entrance. You can hand the note to Zoel 
				 * by dragging it and dropping it on his body.
				 */
				return 1063185;
			}
		}

		public GiveZoelNoteObjective()
		{
		}

		public override void OnComplete()
		{
			System.AddConversation( new GainInnInformationConversation() );
		}
	}

	public class GainInnInformationObjective : QuestObjective
	{
		public override object Message
		{
			get
			{
				/* Take the Blue Teleporter Tile from Daimyo Emino's
				 * house to the Abandoned Inn. Quietly look around
				 * to gain information.
				 */
				return 1063190;
			}
		}

		public GainInnInformationObjective()
		{
		}

		public override void CheckProgress()
		{
			Mobile from = System.From;

			if ( from.Map == Map.Malas && from.X > 399 && from.X < 408 && from.Y > 1091 && from.Y < 1099 )
				Complete();
		}

		public override void OnComplete()
		{
			System.AddConversation( new ReturnFromInnConversation() );
		}
	}

	public class ReturnFromInnObjective : QuestObjective
	{
		public override object Message
		{
			get
			{
				// Go back through the blue teleporter and tell Daimyo Emino what you’ve overheard.
				return 1063197;
			}
		}

		public ReturnFromInnObjective()
		{
		}

		public override void OnComplete()
		{
			System.AddConversation( new SearchForSwordConversation() );
		}
	}

	public class SearchForSwordObjective : QuestObjective
	{
		public override object Message
		{
			get
			{
				/* Take the white teleporter and check the chests for the sword. 
				 * Leave everything else behind. Avoid damage from traps you may 
				 * encounter. To use a potion, make sure at least one hand is 
				 * free and double click on the bottle.
				 */
				return 1063200;
			}
		}

		public SearchForSwordObjective()
		{
		}

		public override void OnComplete()
		{
			System.AddConversation( new HallwayWalkConversation() );
		}
	}

	public class HallwayWalkObjective : QuestObjective
	{
		private bool m_StolenTreasure;

		public bool StolenTreasure
		{
			get{ return m_StolenTreasure; }
			set{ m_StolenTreasure = value; }
		}

		public override object Message
		{
			get
			{
				/* Walk through the hallway being careful 
				 * to avoid the traps. You may be able to 
				 * time the traps to avoid injury.
				 */
				return 1063202;
			}
		}

		public HallwayWalkObjective()
		{
		}

		public override void OnComplete()
		{
			System.AddConversation( new ReturnSwordConversation() );
		}

		public override void ChildDeserialize( GenericReader reader )
		{
			int version = reader.ReadEncodedInt();

			m_StolenTreasure = reader.ReadBool();
		}

		public override void ChildSerialize( GenericWriter writer )
		{
			writer.WriteEncodedInt( (int) 0 ); // version

			writer.Write( (bool) m_StolenTreasure );
		}
	}

	public class ReturnSwordObjective : QuestObjective
	{
		public override object Message
		{
			get
			{
				// Take the sword and bring it back to Daimyo Emino.
				return 1063204;
			}
		}

		public ReturnSwordObjective()
		{
		}

		public override void CheckProgress()
		{
			Mobile from = System.From;

			if ( from.Map != Map.Malas || from.Y > 992 )
				Complete();
		}

		public override void OnComplete()
		{
			System.AddConversation( new SlayHenchmenConversation() );
		}
	}

	public class SlayHenchmenObjective : QuestObjective
	{
		public override object Message
		{
			get
			{
				// Kill three henchmen.
				return 1063206;
			}
		}

		public SlayHenchmenObjective()
		{
		}

		public override int MaxProgress{ get{ return 3; } }

		public override void RenderProgress( BaseQuestGump gump )
		{
			if ( !Completed )
			{
				// Henchmen killed:
				gump.AddHtmlLocalized( 70, 260, 270, 100, 1063207, BaseQuestGump.Blue, false, false );
				gump.AddLabel( 70, 280, 0x64, CurProgress.ToString() );
				gump.AddLabel( 100, 280, 0x64, "/" );
				gump.AddLabel( 130, 280, 0x64, MaxProgress.ToString() );
			}
			else
			{
				base.RenderProgress( gump );
			}
		}

		public override void OnKill( BaseCreature creature, Container corpse )
		{
			if ( creature is Henchman )
				CurProgress++;
		}

		public override void OnComplete()
		{
			System.AddConversation( new GiveEminoSwordConversation() );
		}
	}

	public class GiveEminoSwordObjective : QuestObjective
	{
		public override object Message
		{
			get
			{
				/* You have proven your fighting skills. Bring the Sword to
				 * Daimyo Emino immediately. Be sure to follow the
				 * path back to the teleporter.
				 */
				return 1063210;
			}
		}

		public GiveEminoSwordObjective()
		{
		}

		public override void OnComplete()
		{
		}
	}
}