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

namespace Server.Engines.Quests
{
	public class PatienceQuest : BaseQuest
	{		
		public override QuestChain ChainID{ get{ return QuestChain.Spellweaving; } }
		public override Type NextQuest{ get{ return typeof( NeedsOfManyHeartwoodQuest ); } }
		
		/* Patience */
		public override object Title{ get{ return 1072753; } }
		
		/* Learning to weave spells and control the forces of nature requires sacrifice, 
		discipline, focus, and an unwavering dedication to Sosaria herself.  We do not 
		teach the unworthy.  They do not comprehend the lessons nor the dedication 
		required.  If you would walk the path of the Arcanist, then you must do as I 
		require without hesitation or question.  Your first task is to gather miniature 
		mushrooms ... 20 of them from the branches of our mighty home.  I give you one 
		hour to complete the task. */	
		public override object Description{ get{ return 1072762; } }
		
		/* * nods* Not everyone has the temperment to undertake the way of the Arcanist. */
		public override object Refuse{ get{ return 1072767; } }
		
		/* The mushrooms I seek can be found growing here in The Heartwood. Seek them out 
		and gather them.  You are running out of time. */
		public override object Uncomplete{ get{ return 1072774; } }
		
		/* Have you gathered the mushrooms? */
		public override object Complete{ get{ return 1074166; } }
			
		public PatienceQuest() : base()
		{				
			AddObjective( new ObtainObjective( typeof( MiniatureMushroom ), "miniature mushrooms", 20, 0xD16, 3600 ) );		
				
			AddReward( new BaseReward( 1074872 ) ); // The opportunity to learn the ways of the Arcanist.
		}
		
		public override bool CanOffer()
		{
			return MondainsLegacy.Spellweaving;
		}
		
		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );

			writer.Write( (int) 0 ); // version
		}
		
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();
		}
	}
	
	public class NeedsOfManyHeartwoodQuest : BaseQuest
	{		
		public override QuestChain ChainID{ get{ return QuestChain.Spellweaving; } }
		public override Type NextQuest{ get{ return typeof( NeedsOfManyPartHeartwoodQuest ); } }
		
		/* Needs of the Many - The Heartwood */
		public override object Title{ get{ return 1072797; } }
		
		/* The way of the Arcanist involves cooperation with others and a strong 
		committment to the community of your people.  We have run low on the 
		cotton we use to pack wounds and our people have need.  Bring 10 
		bales of cotton to me. */	
		public override object Description{ get{ return 1072763; } }
		
		/* You endanger your progress along the path with your unwillingness. */
		public override object Refuse{ get{ return 1072768; } }
		
		/* I care not where you acquire the cotton, merely that you provide it. */
		public override object Uncomplete{ get{ return 1072775; } }
		
		/* Well, where are the cotton bales? */
		public override object Complete{ get{ return 1074110; } }
			
		public NeedsOfManyHeartwoodQuest() : base()
		{							
			AddObjective( new ObtainObjective( typeof( Cotton ), "bale of cotton", 10, 0xDF9 ) );			
			
			AddReward( new BaseReward( 1074872 ) ); // The opportunity to learn the ways of the Arcanist.
		}
		
		public override bool CanOffer()
		{
			return MondainsLegacy.Spellweaving;
		}
		
		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );

			writer.Write( (int) 0 ); // version
		}
		
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();
		}
	}
	
	public class NeedsOfManyPartHeartwoodQuest : BaseQuest
	{		
		public override QuestChain ChainID{ get{ return QuestChain.Spellweaving; } }
		public override Type NextQuest{ get{ return typeof( MakingContributionHeartwoodQuest ); } }
		
		/* Needs of the Many - The Heartwood */
		public override object Title{ get{ return 1072797; } }
		
		/* We must look to the defense of our people! Bring boards for new arrows. */	
		public override object Description{ get{ return 1072764; } }
		
		/* The people have need of these items.  You are proving yourself inadequate 
		to the demands of a member of this community. */
		public override object Refuse{ get{ return 1072769; } }
		
		/* The requirements are simple -- 250 boards. */
		public override object Uncomplete{ get{ return 1072776; } }
		
		/* Well, where are the boards? */
		public override object Complete{ get{ return 1074152; } }
			
		public NeedsOfManyPartHeartwoodQuest() : base()
		{							
			AddObjective( new ObtainObjective( typeof( Board ), "boards", 250, 0x1BD7 ) );			
			
			AddReward( new BaseReward( 1074872 ) ); // The opportunity to learn the ways of the Arcanist.
		}
		
		public override bool CanOffer()
		{
			return MondainsLegacy.Spellweaving;
		}
		
		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );

			writer.Write( (int) 0 ); // version
		}
		
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();
		}
	}
	
	public class MakingContributionHeartwoodQuest : BaseQuest
	{		
		public override QuestChain ChainID{ get{ return QuestChain.Spellweaving; } }
		public override Type NextQuest{ get{ return typeof( UnnaturalCreationsQuest ); } }
		
		/* Making a Contribution - The Heartwood */
		public override object Title{ get{ return 1072798; } }
		
		/* With health and defense assured, we need look to the need of the community 
		for food and drink.  We will feast on fish steaks, sweets, and wine.  You 
		will supply the ingredients, the cooks will prepare the meal.  As a Arcanist 
		relies upon others to build focus and lend their power to her workings, the 
		community needs the effort of all to survive. */	
		public override object Description{ get{ return 1072765; } }
		
		/* Do not falter now.  You have begun to show promise. */
		public override object Refuse{ get{ return 1072770; } }
		
		/* Where are the items you've been tasked to supply for the feast? */
		public override object Uncomplete{ get{ return 1072777; } }
		
		/* Ah good, you're back.  We're eager for the feast. */
		public override object Complete{ get{ return 1074158; } }
			
		public MakingContributionHeartwoodQuest() : base()
		{							
			AddObjective( new ObtainObjective( typeof( SackFlour ), "sack of flour", 1, 0x1039 ) );
			AddObjective( new ObtainObjective( typeof( JarHoney ), "jar of honey", 10, 0x9EC ) );
			AddObjective( new ObtainObjective( typeof( FishSteak ), "fish steak", 20, 0x97B ) );		
				
			AddReward( new BaseReward( 1074872 ) ); // The opportunity to learn the ways of the Arcanist.
		}	
		
		public override bool CanOffer()
		{
			return MondainsLegacy.Spellweaving;
		}
		
		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );

			writer.Write( (int) 0 ); // version
		}
		
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();
		}
	}
	
	public class UnnaturalCreationsQuest : BaseQuest
	{		
		public override QuestChain ChainID{ get{ return QuestChain.Spellweaving; } }
		
		/* Unnatural Creations */
		public override object Title{ get{ return 1072758; } }
		
		/* You have proven your desire to contribute to the community and serve the 
		people.  Now you must demonstrate your willingness to defend Sosaria from 
		the greatest blight that plagues her.  Unnatural creatures, brought to a 
		sort of perverted life, despoil our fair world.  Destroy them -- 5 Exodus 
		Overseers and 2 Exodus Minions. */	
		public override object Description{ get{ return 1072780; } }
		
		/* You must serve Sosaria with all your heart and strength.  
		Your unwillingness does not reflect favorably upon you. */
		public override object Refuse{ get{ return 1072771; } }
		
		/* Every moment you procrastinate, these unnatural creatures damage Sosaria. */
		public override object Uncomplete{ get{ return 1072779; } }
		
		/* Well done!  Well done, indeed.  You are worthy to become an arcanist! */
		public override object Complete{ get{ return 1074167; } }
			
		public UnnaturalCreationsQuest() : base()
		{							
			AddObjective( new SlayObjective( typeof( ExodusOverseer ), "exodus overseers", 5 ) );
			AddObjective( new SlayObjective( typeof( ExodusMinion ), "exodus minions", 2 ) );
			
			AddReward( new BaseReward( typeof( ArcaneCircleScroll ), 1071026 ) ); // Arcane Circle			
			AddReward( new BaseReward( typeof( GiftOfRenewalScroll ), 1071027 ) ); // Gift of Renewal
			AddReward( new BaseReward( typeof( SpellweavingBook ), 1031600 ) ); // Spellweaving Spellbook
		}	
		
		public override bool CanOffer()
		{
			return MondainsLegacy.Spellweaving;
		}
		
		public override void GiveRewards()
		{
			Owner.Spellweaving = true;
			
			base.GiveRewards();
		}
		
		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );

			writer.Write( (int) 0 ); // version
		}
		
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();
		}
	}
}