class PollingWaitAssistant {

    public PollingWaitState getPollingWaitState() {

        if (!started) {
            return PollingWaitState.NOT_STARTED;
        }
        if ( Time.currentTimeMillis() - startTime > timeoutInMilliSeconds) {
            return PollingWaitState.TIMEOUT;
        }
        if (!spamChecker.isWaitLongEnough()) {
            spamChecker.incrementSpamCheck();
            if (spamChecker.isSpammed()) {
                return PollingWaitState.SPAMMED;
            }
            return PollingWaitState.TOO_EARLY;
        }

        if (finishFutureEvent.isDone()) {
            return PollingWaitState.COMPLETE;
        }
        return PollingWaitState.WAITING;
    }

    public  PollingWaitAssistant(final long timeoutInMilliSeconds, final long shortTimeout, final long medTimeout,
                                final long longTimeout);
    public  PollingWaitAssistant(final long timeoutInMilliSeconds);

}