using System;
using System.IO;
using System.Collections;
using Server;
using Server.Regions;

namespace Server
{
	public class UnderworldEntrance : BaseRegion
	{
		private const int Range = 10; // No house may be placed within 5 tiles of the entrances

		public UnderworldEntrance( int x, int y, Map map ): base( null, map, Region.DefaultPriority, new Rectangle2D( x - Range, y - Range, 1 + (Range * 2), 1 + (Range * 2) ) )
		{
			GoLocation = new Point3D( x, y, map.GetAverageZ( x, y ) );

			Register();
		}

		public static void Initialize()
		{
			string filePath = Path.Combine( Core.BaseDirectory, "Data/Config/entrances.cfg" );
			int i = 0, x = 0, y = 0;

			if ( File.Exists( filePath ) )
			{
				using ( StreamReader ip = new StreamReader( filePath ) )
				{
					string line;

					while ( (line = ip.ReadLine()) != null )
					{
						i++;

						try
						{
							string[] split = line.Split( ' ' );

							x = Convert.ToInt32( split[0] );
							y = Convert.ToInt32( split[1] );

							try
							{
								new UnderworldEntrance( x, y, Map.Britannia );
							}
							catch ( Exception e )
							{
								Console.WriteLine( "{0} {1} {2} {3}", i, x, y, e );
							}
						}
						catch
						{
                            Console.WriteLine( "Warning: Error in Line '{0}' of Data/Config/entrances.cfg", line );
						}
					}
				}
			}
		}

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

		public override void OnEnter( Mobile m )
		{
			if ( m.AccessLevel > AccessLevel.Player )
				m.SendMessage( "You have entered a protected underworld entrance area." );
		}

		public override void OnExit( Mobile m )
		{
			if ( m.AccessLevel > AccessLevel.Player )
				m.SendMessage( "You have left a protected underworld entrance area." );
		}
	}
}
