"use strict";
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const react_1 = __importStar(require("react"));
const trackingPopupHidden_1 = require("../events/trackingPopupHidden");
const trackingPopupShown_1 = require("../events/trackingPopupShown");
const settings_1 = require("../settings");
const longTermTrackingOptIn_1 = require("./longTermTrackingOptIn");
const longTermTrackingPopup_1 = require("./longTermTrackingPopup");
const TrackingEvents = props => {
    const ref = react_1.useRef(false);
    react_1.useEffect(() => {
        if (props.show && ref.current === false) {
            trackingPopupShown_1.sendTrackingPopupShownEvent();
        }
        ref.current = props.show;
    }, [props.show]);
    return null;
};
class LongTermTracking extends react_1.default.Component {
    constructor() {
        super(...arguments);
        this.state = {
            show: false,
            hideFast: false
        };
        this.hide = () => {
            this.setState({
                show: false,
                hideFast: true
            });
            trackingPopupHidden_1.sendTrackingPopupHiddenEvent();
        };
    }
    componentDidMount() {
        let firstVisited = sessionStorage.getItem("first-visited");
        if (firstVisited == null) {
            firstVisited = Date.now().toString();
            sessionStorage.setItem("first-visited", firstVisited);
        }
        const firstVisitedTime = parseInt(firstVisited, 10);
        this.showTimeout = setTimeout(() => {
            if (settings_1.isTrackingEnabled()) {
                this.setState({
                    show: true,
                    hideFast: false
                });
            }
            else {
                this.setState({
                    show: false,
                    hideFast: false
                });
            }
        }, Math.max(5000, firstVisitedTime + 30000 - Date.now()));
    }
    componentWillUnmount() {
        clearTimeout(this.showTimeout);
    }
    render() {
        if (!settings_1.isTrackingEnabled()) {
            return null;
        }
        return (<longTermTrackingOptIn_1.LongTermTrackingOptIn>
        {(trackingState, setEnabled) => (<longTermTrackingPopup_1.LongTermTrackingPopup visible={trackingState === settings_1.LongTermTrackingState.None && this.state.show} hideFast={this.state.hideFast}>
            {state => (<>
                <TrackingEvents show={state !== longTermTrackingPopup_1.LongTermTrackingPopupState.Hidden}/>
                {this.props.children(state, trackingState, setEnabled, this.hide)}
              </>)}
          </longTermTrackingPopup_1.LongTermTrackingPopup>)}
      </longTermTrackingOptIn_1.LongTermTrackingOptIn>);
    }
}
exports.LongTermTracking = LongTermTracking;
//# sourceMappingURL=longTermTracking.jsx.map