using System;
using VOID.Generic.Objects.Unit.Actions;
using VOID.Generic.Player.Input;
using VOID.Generic.Player.Util;
using VOID.UserInterface.Game;

namespace VOID.Generic.Player.CursorOperation
{
    public class OnSceneCursorOperation : AbstractCursorOperation
    {
        public override Type ForType() => null;
        
        public override bool Check(SelectUtilResult select)
        {
            return !select.onUI && !select.selectObject;
        }

        public override void DoDefault(SelectUtilResult select, bool isAlternate)
        {
            if (isAlternate) return;
            
            var activeUnit = PlayerController.current.activeUnit;
            var attackAbility = activeUnit.unitAbilityBook.attackAbility;

            if (activeUnit.unitData.canAttack && PlayerInputManager.current.isForceAttack)
            {
                activeUnit.Order(new MoveAction(activeUnit, select.position, attackAbility.range));
                activeUnit.Order(new AbilityAction(activeUnit, attackAbility, select.position));
                return;
            }
            
            activeUnit.OrderStop();
            activeUnit.Order(new MoveAction(activeUnit, select.position));
        }

        public override void DoContext(SelectUtilResult select)
        {
            ContextMenuUI.current.Close();
            PlayerController.current.activeUnit.OrderStop();
        }
    }
}