using Godot;

public class HarvestNode : ProgramNode
{
    public HarvestNode()
    {
        DisplayText = "Harvest";
    }
    public override NodeResult Execute(Robot robot, double delta)
    {
        Vector3I mapIndex = Pathfinding.GetClosestStartPoint(robot.Position);
        Tile tile = GameData.map[mapIndex.Y].tiles[mapIndex.X, mapIndex.Z];

        if (!tile.containsResource)
        {
            lastExecutionMessage = "No resource on this tile";
            return NodeResult.FAILURE;
        }

        if (!tile.resource.CanExtract())
        {
            lastExecutionMessage = "Resource is depleted and not endless or you haven't unlocked it yet";
            return NodeResult.SUCCESS;
        }

        if (tile.resource.Extract(delta))
        {
            if (!GameData.inventory.AddItem(new Item {data = tile.resource.item}, 1))
            {
                lastExecutionMessage = "Not enough space";
                return NodeResult.FAILURE;
            }
        }
        return NodeResult.RUNNING;
    }

    public override void ReadParameters(NodeDisplay display)
    {
    }

    public override ProgramNode Duplicate()
    {
        HarvestNode duplicate = new HarvestNode();
        return duplicate;
    }

    public override void Setup(NodeDisplay display)
    {
    }

    public override string Save()
    {
        return $"Name: {DisplayText}";
    }
}
