using System;
using System.Xml;
using Server;
using Server.Mobiles;
using Server.Gumps;

namespace Server.Regions
{
	public class DungeonRegion : BaseRegion
	{
		public override bool YoungProtected { get { return false; } }

		private Point3D m_EntranceLocation;
		private Map m_EntranceMap;

		public Point3D EntranceLocation{ get{ return m_EntranceLocation; } set{ m_EntranceLocation = value; } }
		public Map EntranceMap{ get{ return m_EntranceMap; } set{ m_EntranceMap = value; } }

		public DungeonRegion( XmlElement xml, Map map, Region parent ) : base( xml, map, parent )
		{
			XmlElement entrEl = xml["entrance"];

			Map entrMap = map;
			ReadMap( entrEl, "map", ref entrMap, false );

			if ( ReadPoint3D( entrEl, entrMap, ref m_EntranceLocation, false ) )
				m_EntranceMap = entrMap;
		}

		public override bool AllowHousing( Mobile from, Point3D p )
		{
			return false;
		}

		public override void AlterLightLevel( Mobile m, ref int global, ref int personal )
		{
			global = LightCycle.DungeonLevel;
		}

		public override bool CanUseStuckMenu( Mobile m )
		{
			if ( this.Map == Map.Felucca )
				return false;

			return base.CanUseStuckMenu( m );
		}

        public override void OnEnter( Mobile m )
        {
            base.OnEnter( m );
            if ( m != null && m.Player )
            {
                m.SendMessage( "You have entered the <BASEFONT COLOR='#FF0000'>{0}</BASEFONT>", this.Name);
                Timer.DelayCall( TimeSpan.FromMilliseconds( 100 ), delegate()
                {
                    if ( m != null && m.Alive ) 
                    {
                        Server.Commands.StableMountCommand.ForceDismountAndStore((PlayerMobile)m);
                    }
                });
            }
        }

        public override void OnExit( Mobile m )
        {
            base.OnExit( m );
            if ( m != null && m.Player )
            {
                Timer.DelayCall( TimeSpan.FromMilliseconds( 100 ), delegate()
                {
                    if ( m != null && m.Alive )
                    {
                        Server.Commands.RetrieveMountCommand.AutoRemountPlayer((PlayerMobile)m);
                    }
                });
            }
        }
	}
}
