using System;
using ECOT.Engine;
using ECOT.Game.Buildings;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace ECOT.Game.Tools
{
    public class ConstructionTool : Tool
    {
        City ville = null;

        public override void Begin()
        {
            // Change le curseur à l'image du bâtiment à construire
           Building template = GameController.Instance.BuildingFactory.GetBuilding(GameController.Instance.SelectedBuilding.Infos.Name);
           
            // Dessine toutes les aires de villes
           GameRenderer.Instance.DrawCityAreas = true;

            Kernel.Instance.Cursor.Sprite = (Sprite)template.FrontSprite.Clone();
#if !XBOX
            Kernel.Instance.Cursor.Sprite.HotSpot = new Vector2(32, 96 - 12);
#else
            Kernel.Instance.Cursor.Sprite.HotSpot = new Vector2(0, 64);
#endif
        }

        public override void Over(Vector2 position)
        {
            ville = GameController.Instance.FindNearestCity(position);
            Vector2 slot = ville.ToSlot(position);

            // Si on se trouve dans la zone constructible d'une ville
            if (ville.InArea(position))
            {
                // Affichage de la grille
                ville.RenderState.DrawGrid = true;

                // Si la case est disponible
                if (ville.IsSlotAvailable(slot))
                {
                    Kernel.Instance.Cursor.Color = Color.Green;
                }
                else
                {
                    Kernel.Instance.Cursor.Color = Color.Red;
                }
            }
            else
                ville.RenderState.DrawGrid = false;


        }

        public override void Click(Vector2 position)
        {
            Vector2 slot = ville.ToSlot(position);
            if(ville.IsSlotAvailable(slot))
            {
                ville.AddBuilding(slot, GameController.Instance.BuildingFactory.CreateCityBuilding(GameController.Instance.SelectedBuilding.Infos.Name));

                // Change l'outil en outil de sélection
                 GameController.Instance.CurrentTool = ToolType.Selection;
            }
        }

        public override void End()
        {
            // Ne dessine plus les slots de la ville
            if (ville != null)
                ville.RenderState.DrawGrid = false;
            // Ne dessine plus toutes les aires de villes
            GameRenderer.Instance.DrawCityAreas = false;
        }

        #region Properties
        public override ToolType Type
        {
            get { return ToolType.Construction; }
        }
        #endregion
    }
}
