using System;
using Server;
using Server.Accounting;
using Server.Items;
using Server.Spells.Sixth;
using Server.Targeting;

namespace Server.Regions
{
	public class HouseRaffleRegion : BaseRegion
	{
		private HouseRaffleStone m_Stone;

		public HouseRaffleRegion( HouseRaffleStone stone )
			: base( null, stone.PlotFacet, Region.DefaultPriority, stone.PlotBounds )
		{
			m_Stone = stone;
		}

		public bool CheckAccount( Mobile mobCheck, Mobile accCheck )
		{
			if ( accCheck != null )
			{
				Account a = accCheck.Account as Account;

				if ( a != null )
				{
					for ( int i = 0; i < a.Length; ++i )
					{
						if ( a[i] == mobCheck )
							return true;
					}
				}
			}

			return false;
		}

		public override bool AllowHousing( Mobile from, Point3D p )
		{
			if ( m_Stone == null || m_Stone.Winner == null )
				return false;

			return ( from == m_Stone.Winner || CheckAccount( from, m_Stone.Winner ) );
		}

		public override bool OnTarget( Mobile m, Target t, object o )
		{
			if ( m.Spell != null && m.Spell is MarkSpell && m.AccessLevel == AccessLevel.Player )
			{
				m.SendLocalizedMessage( 501800 ); // You cannot mark an object at that location.
				return false;
			}

			return base.OnTarget( m, t, o );
		}

		public override bool OnBeginSpellCast( Mobile m, ISpell s )
		{
			if ( s is MarkSpell && m.AccessLevel == AccessLevel.Player )
			{
				m.SendLocalizedMessage( 501800 ); // You cannot mark an object at that location.
				return false;
			}

			return base.OnBeginSpellCast( m, s );
		}
	}
}
