using ECOT.Engine;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace ECOT.Game.Tools
{
    public class SelectionTool : Tool
    {
        private ISelectable hoverItem = null;


        public override void Begin()
        {
#if !XBOX
            // Change le curseur en flèche
            Kernel.Instance.Cursor.ApplyZoom = false;
            Kernel.Instance.Cursor.Sprite = new Sprite(@"Bootstrap\Cursors", 0, 0, 32, 32, HotSpotType.TopLeft);
            Kernel.Instance.Cursor.Sprite.HotSpot = new Vector2(
                Kernel.Instance.Cursor.Sprite.HotSpot.X + 4,
                Kernel.Instance.Cursor.Sprite.HotSpot.Y + 4);
            Kernel.Instance.Cursor.Color = Color.White;
#else
            Kernel.Instance.Cursor.ApplyZoom = true;
            Kernel.Instance.Cursor.Sprite = new Sprite(@"Textures\Common\MapCursor", HotSpotType.TopLeft);
            Kernel.Instance.Cursor.Sprite.HotSpot = new Vector2(15, 15);
            Kernel.Instance.Cursor.Color = new Color(30, 144, 255);
#endif
        }

        public override void Over(Vector2 position)
        {
            // Récupère l'objet sélectionné
            ISelectable oldHoverItem = this.hoverItem;
            this.hoverItem = GameController.Instance.Map.GetItem(position);

#if XBOX
            Kernel.Instance.Cursor.Enable = (this.hoverItem == null);
#endif

            // Si on re-sélectionne l'objet déjà sélectionné, on ne fait rien
            if (oldHoverItem == this.hoverItem && this.hoverItem != null) return;

            if (oldHoverItem != null)
                oldHoverItem.Out();

            if (this.hoverItem != null)
                this.hoverItem.Hover();
        }

        public override void Click(Vector2 position)
        {
            // Récupère l'objet sélectionné
            GameController.Instance.CurrentSelectedItem = GameController.Instance.Map.GetItem(position);


            // Si on re-sélectionne l'objet déjà sélectionné, on ne fait rien
            // Sauf si c'est une ville : en recliquant sur la ville, on a les sons qui se relancent
            if (GameController.Instance.CurrentSelectedItem == GameController.Instance.OldSelectedItem && GameController.Instance.CurrentSelectedItem != null && !(GameController.Instance.CurrentSelectedItem is City)) return;

            if (GameController.Instance.OldSelectedItem != null)
                GameController.Instance.OldSelectedItem.Blur();
            
            if (GameController.Instance.CurrentSelectedItem != null)
            {
                GameController.Instance.CurrentSelectedItem.Focus();
            }
        }

        public override void RightClick(Vector2 position)
        {
            base.RightClick(position);

            // HACK
            GameController.Instance.Map.GetItem(Vector2.Zero);
            GameController.Instance.CurrentSelectedItem = null;
        }

        public override void End()
        {
            if (GameController.Instance.CurrentSelectedItem != null)
                GameController.Instance.CurrentSelectedItem.Blur();
        }

        public override ToolType Type
        {
            get { return ToolType.Selection; }
        }
    }
}
