"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const react_1 = __importDefault(require("react"));
const pageView_1 = require("../events/pageView");
const trackingConsent_1 = require("../events/trackingConsent");
const settings_1 = require("../settings");
class LongTermTrackingOptIn extends react_1.default.Component {
    constructor() {
        super(...arguments);
        this.state = {
            trackingState: settings_1.getLongTermTrackingState()
        };
        this.setTrackingState = (trackingEnabled) => {
            if (trackingEnabled) {
                localStorage.setItem(LongTermTrackingOptIn.Key, settings_1.LongTermTrackingState.Enabled);
            }
            else {
                localStorage.setItem(LongTermTrackingOptIn.Key, settings_1.LongTermTrackingState.Disabled);
            }
            window.dispatchEvent(new StorageEvent("storage", {
                key: LongTermTrackingOptIn.Key
            }));
            trackingConsent_1.sendTrackingConsentEvent(trackingEnabled);
        };
        this.storageDidChange = () => {
            this.setState({
                trackingState: settings_1.getLongTermTrackingState()
            }, () => {
                pageView_1.sendPageview(false); // Update the cookies based on tracking state
            });
        };
        this.storageEvent = (e) => {
            if (e.key === LongTermTrackingOptIn.Key) {
                this.storageDidChange();
            }
        };
    }
    componentDidMount() {
        this.storageDidChange();
        window.addEventListener("storage", this.storageEvent);
        window.addEventListener("analytics", this.storageDidChange);
    }
    componentWillUnmount() {
        window.removeEventListener("storage", this.storageEvent);
        window.removeEventListener("analytics", this.storageDidChange);
    }
    render() {
        return (<>
        {this.props.children(this.state.trackingState, this.setTrackingState, settings_1.isTrackingEnabled())}
      </>);
    }
}
exports.LongTermTrackingOptIn = LongTermTrackingOptIn;
LongTermTrackingOptIn.Key = settings_1.LongTermTrackingKey;
//# sourceMappingURL=longTermTrackingOptIn.jsx.map