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

namespace Server.Multis
{
	public class OrcCamp : BaseCamp
	{
		private Mobile m_Prisoner;
		private BaseDoor m_Gate;

		[Constructable]
		public OrcCamp() : base( 0x1D4C )
		{
		}

		public override void AddComponents()
		{
			IronGate gate = new IronGate( DoorFacing.EastCCW );
			m_Gate = gate;

			gate.KeyValue = Key.RandomValue();
			gate.Locked = true;

			AddItem( gate, -2, 1, 0 );

			MetalChest chest = new MetalChest();
			chest.Movable = false;
			chest.ItemID = 0xE7C; // metal chest facing East
			chest.DropItem( new Key( KeyType.Rusty, gate.KeyValue ) );
			LootPack.Average.Generate( chest );

			AddItem( chest, 4, 4, 0 );

			AddMobile( new Orc(), 15, 0, -2, 0 );
			AddMobile( new Orc(), 15, 0,  1, 0 );
			AddMobile( new Orc(), 15, 0,  1, 0 );
			AddMobile( new Orc(), 15, 0,  1, 0 );
			AddMobile( new Orc(), 15, 0,  1, 0 );
			AddMobile( new OrcishMage(), 15, 0, -1, 0 );
			AddMobile( new OrcCaptain(), 15, 0, -1, 0 );
			if ( Utility.RandomBool() )
				AddMobile( new OrcishLord(), 15, 0,  0, 0 );

			switch ( Utility.Random( 8 ) )
			{
				default:m_Prisoner = new Noble(); break;
				case 0: m_Prisoner = new SeekerOfAdventure(); break;
				case 1: m_Prisoner = new Messenger(); break;
				case 2: m_Prisoner = new Peasant(); break;
				case 3: m_Prisoner = new BrideGroom(); break;
			}

			m_Prisoner.YellHue = Utility.RandomList( 0x57, 0x67, 0x77, 0x87, 0x117 );

			AddMobile( m_Prisoner, 2, -2, 0, 0 );
		}

		public override void OnEnter( Mobile m )
		{
			base.OnEnter( m );

			if ( m.Player && m_Prisoner != null && m_Gate != null && m_Gate.Locked )
			{
				int number;

				switch ( Utility.Random( 4 ) )
				{
					default:
					case 0: number =  502264; break; // Help a poor prisoner!
					case 1: number =  502266; break; // Aaah! Help me!
					case 2: number = 1046000; break; // Help! These savages wish to end my life!
					case 3: number = 1046003; break; // Quickly! Kill them for me! HELP!!
				}

				m_Prisoner.Yell( number );
			}
		}

		public OrcCamp( Serial serial ) : base( serial )
		{
		}

		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );

			writer.Write( (int) 0 ); // version

			writer.Write( m_Prisoner );
			writer.Write( m_Gate );
		}

		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();

			switch ( version )
			{
				case 0:
				{
					m_Prisoner = reader.ReadMobile();
					m_Gate = reader.ReadItem() as BaseDoor;
					break;
				}
			}
		}
	}
}