﻿using JLGames.RocketDriver.CSharp;

namespace JLGames.RocketDriver.Actions.Wait
{
    internal class WaitCall
    {
        private static int m_SId = 0;

        internal readonly int Id;
        internal readonly Callback Call;
        internal readonly int Weight;

        protected WaitCall(Callback call, int weight = 0)
        {
            Id = m_SId++;
            Call = call;
            Weight = weight;
        }

        public override string ToString()
        {
            return $"WaitCall({Id},{Call},{Weight})";
        }

        internal void Invoke()
        {
            Call?.Invoke();
            Call?.Clear();
        }

        public static WaitCall Instantiate(Callback call, int weight = 0)
        {
            return new WaitCall(call, weight);
        }
    }
}