﻿using System;

namespace DotPulsar.Internal
{
    public sealed class StateTask<TState> : IDisposable
    {
        private readonly TState _state;
        private readonly StateChanged _change;

        public StateTask(TState state, StateChanged change)
        {
            _state = state;
            _change = change;
            CancelableCompletionSource = new CancelableCompletionSource<TState>();
        }

        public CancelableCompletionSource<TState> CancelableCompletionSource { get; }

        public void Dispose() => CancelableCompletionSource.Dispose();

        public bool IsAwaiting(TState state)
        {
            if (_change == StateChanged.To)
                return _state.Equals(state);

            return !_state.Equals(state);
        }
    }
}
