using System;
using Server;
using Server.Mobiles;
using Server.Network;

namespace Server.Items
{
	public class PlagueBeastVein : PlagueBeastComponent
	{
		private bool m_Cut;

		public bool Cut
		{
			get { return m_Cut; }
		}

		private Timer m_Timer;

		public PlagueBeastVein( int itemID, int hue ) : base( itemID, hue )
		{
			m_Cut = false;
		}

		public override bool Scissor( Mobile from, Scissors scissors )
		{
			if ( IsAccessibleTo( from ) )
			{
				if ( !m_Cut && m_Timer == null )
				{
					m_Timer = Timer.DelayCall<Mobile>( TimeSpan.FromSeconds( 3 ), new TimerStateCallback<Mobile>( CuttingDone ), from );
					scissors.PublicOverheadMessage( MessageType.Regular, 0x3B2, 1071899 ); // You begin cutting through the vein.
					return true;
				}
				else
					scissors.PublicOverheadMessage( MessageType.Regular, 0x3B2, 1071900 ); // // This vein has already been cut.
			}

			return false;
		}

		public override void OnAfterDelete()
		{
			if ( m_Timer != null && m_Timer.Running )
				m_Timer.Stop();
		}

		private void CuttingDone( Mobile from )
		{
			m_Cut = true;

			if ( ItemID == 0x1B1C )
				ItemID = 0x1B1B;
			else
				ItemID = 0x1B1C;

			if ( Owner != null )
				Owner.PlaySound( 0x199 );

			PlagueBeastRubbleOrgan organ = Organ as PlagueBeastRubbleOrgan;

			if ( organ != null )
				organ.OnVeinCut( from, this );
		}

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

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

			writer.WriteEncodedInt( 0 ); // version

			writer.Write( (bool) m_Cut );
		}

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

			int version = reader.ReadEncodedInt();

			m_Cut = reader.ReadBool();
		}
	}
}
