import React, { useEffect, useRef } from "react";
import { sendTrackingPopupHiddenEvent } from "../events/trackingPopupHidden";
import { sendTrackingPopupShownEvent } from "../events/trackingPopupShown";
import { LongTermTrackingState, isTrackingEnabled } from "../settings";
import { LongTermTrackingOptIn } from "./longTermTrackingOptIn";
import { LongTermTrackingPopup, LongTermTrackingPopupState } from "./longTermTrackingPopup";
const TrackingEvents = props => {
    const ref = useRef(false);
    useEffect(() => {
        if (props.show && ref.current === false) {
            sendTrackingPopupShownEvent();
        }
        ref.current = props.show;
    }, [props.show]);
    return null;
};
export class LongTermTracking extends React.Component {
    constructor() {
        super(...arguments);
        this.state = {
            show: false,
            hideFast: false
        };
        this.hide = () => {
            this.setState({
                show: false,
                hideFast: true
            });
            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 (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 (!isTrackingEnabled()) {
            return null;
        }
        return (<LongTermTrackingOptIn>
        {(trackingState, setEnabled) => (<LongTermTrackingPopup visible={trackingState === LongTermTrackingState.None && this.state.show} hideFast={this.state.hideFast}>
            {state => (<>
                <TrackingEvents show={state !== LongTermTrackingPopupState.Hidden}/>
                {this.props.children(state, trackingState, setEnabled, this.hide)}
              </>)}
          </LongTermTrackingPopup>)}
      </LongTermTrackingOptIn>);
    }
}
//# sourceMappingURL=longTermTracking.jsx.map