/*
 * 1DS JS SDK POST plugin, 4.4.0-nightlybeta3.2601-11
 * Copyright (c) Microsoft and contributors. All rights reserved.
 * (Microsoft Internal Only)
 */
/**
* ClockSkewManager.ts
* @author Abhilash Panwar (abpanwar)
* @copyright Microsoft 2018
*/
/**
 * Factory function to create a ClockSkewManager instance.
 * @returns A new IClockSkewManager instance.
 * @internal
 */
export function createClockSkewManager() {
    var _allowRequestSending = true;
    var _shouldAddClockSkewHeaders = true;
    var _isFirstRequest = true;
    var _clockSkewHeaderValue = "use-collector-delta";
    var _clockSkewSet = false;
    return {
        /**
         * Determine if requests can be sent.
         * @returns True if requests can be sent, false otherwise.
         */
        allowRequestSending: function () {
            return _allowRequestSending;
        },
        /**
         * Tells the ClockSkewManager that it should assume that the first request has now been sent,
         * If this method had not yet been called AND the clock Skew had not been set this will set
         * allowRequestSending to false until setClockSet() is called.
         */
        firstRequestSent: function () {
            if (_isFirstRequest) {
                _isFirstRequest = false;
                if (!_clockSkewSet) {
                    // Block sending until we get the first clock Skew
                    _allowRequestSending = false;
                }
            }
        },
        /**
         * Determine if clock skew headers should be added to the request.
         * @returns True if clock skew headers should be added, false otherwise.
         */
        shouldAddClockSkewHeaders: function () {
            return _shouldAddClockSkewHeaders;
        },
        /**
         * Gets the clock skew header value.
         * @returns The clock skew header value.
         */
        getClockSkewHeaderValue: function () {
            return _clockSkewHeaderValue;
        },
        /**
         * Sets the clock skew header value. Once clock skew is set this method
         * is no-op.
         * @param timeDeltaInMillis - Time delta to be saved as the clock skew header value.
         */
        setClockSkew: function (timeDeltaInMillis) {
            if (!_clockSkewSet) {
                if (timeDeltaInMillis) {
                    _clockSkewHeaderValue = timeDeltaInMillis;
                    _shouldAddClockSkewHeaders = true;
                    _clockSkewSet = true;
                }
                else {
                    _shouldAddClockSkewHeaders = false;
                }
                // Unblock sending
                _allowRequestSending = true;
            }
        }
    };
}
//# sourceMappingURL=ClockSkewManager.js.map