using System;
using System.Collections;
using Server;
using Server.Mobiles;
using Server.Regions;

namespace Server.Engines.ConPVP
{
	public class SafeZone : GuardedRegion
	{
		public static readonly int SafeZonePriority = HouseRegion.HousePriority + 1;

		/*public override bool AllowReds{ get{ return true; } }*/

		public SafeZone( Rectangle2D area, Point3D goloc, Map map, bool isGuarded ) : base( null, map, SafeZonePriority, area )
		{
			GoLocation = goloc;

			this.Disabled = !isGuarded;

			Register();
		}

		public override bool AllowHousing( Mobile from, Point3D p )
		{
			if ( from.AccessLevel < AccessLevel.GameMaster )
				return false;

			return base.AllowHousing( from, p );
		}

		public override bool OnMoveInto( Mobile m, Direction d, Point3D newLocation, Point3D oldLocation )
		{
			if ( m.Player && Factions.Sigil.ExistsOn( m ) )
			{
				m.SendMessage( 0x22, "You are holding a sigil and cannot enter this zone." );
				return false;
			}

			PlayerMobile pm = m as PlayerMobile;

			if ( pm == null && m is BaseCreature )
			{
				BaseCreature bc = (BaseCreature)m;

				if ( bc.Summoned )
					pm = bc.SummonMaster as PlayerMobile;
			}

			if ( pm != null && pm.DuelContext != null && pm.DuelContext.StartedBeginCountdown )
				return true;

			if ( DuelContext.CheckCombat( m ) )
			{
				m.SendMessage( 0x22, "You have recently been in combat and cannot enter this zone." );
				return false;
			}

			return base.OnMoveInto( m, d, newLocation, oldLocation );
		}

		public override void OnEnter( Mobile m )
		{
			m.SendMessage( "You have entered a dueling safezone. No combat other than duels are allowed in this zone." );
		}

		public override void OnExit( Mobile m )
		{
			m.SendMessage( "You have left a dueling safezone. Combat is now unrestricted." );
		}

		public override bool CanUseStuckMenu( Mobile m )
		{
			return false;
		}
	}
}