using System.Threading;
using System.Threading.Tasks;
using Capnp.Rpc;

namespace Capnp.Net.Runtime.Tests
{
    class ProvidedCapabilityMock : Skeleton
    {
        readonly TaskCompletionSource<(ulong, ushort, DeserializerState, CancellationToken)>
            _call = new TaskCompletionSource<(ulong, ushort, DeserializerState, CancellationToken)>();

        public override Task<AnswerOrCounterquestion> Invoke(ulong interfaceId, ushort methodId, 
            DeserializerState args, CancellationToken cancellationToken = default(CancellationToken))
        {
            _call.SetResult((interfaceId, methodId, args, cancellationToken));
            return Return.Task;
        }

        public Task<(ulong, ushort, DeserializerState, CancellationToken)> WhenCalled =>
            _call.Task;

        public TaskCompletionSource<AnswerOrCounterquestion> Return { get; } = new TaskCompletionSource<AnswerOrCounterquestion>();
    }
}