#nullable disable

using System;
using SMAPI.Tests.ModApiConsumer.Interfaces;

namespace SMAPI.Tests.ModApiConsumer
{
    /// <summary>A simulated API consumer.</summary>
    public class ApiConsumer
    {
        /*********
        ** Public methods
        *********/
        /// <summary>Call the event field on the given API.</summary>
        /// <param name="api">The API to call.</param>
        /// <param name="getValues">Get the number of times the event was called and the last value received.</param>
        public void UseEventField(ISimpleApi api, out Func<(int timesCalled, int actualValue)> getValues)
        {
            // act
            int calls = 0;
            int lastValue = -1;
            api.OnEventRaised += (_, value) =>
            {
                calls++;
                lastValue = value;
            };

            getValues = () => (timesCalled: calls, actualValue: lastValue);
        }

        /// <summary>Call the event property on the given API.</summary>
        /// <param name="api">The API to call.</param>
        /// <param name="getValues">Get the number of times the event was called and the last value received.</param>
        public void UseEventProperty(ISimpleApi api, out Func<(int timesCalled, int actualValue)> getValues)
        {
            // act
            int calls = 0;
            int lastValue = -1;
            api.OnEventRaisedProperty += (_, value) =>
            {
                calls++;
                lastValue = value;
            };

            getValues = () => (timesCalled: calls, actualValue: lastValue);
        }
    }
}