"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
    var ownKeys = function(o) {
        ownKeys = Object.getOwnPropertyNames || function (o) {
            var ar = [];
            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
            return ar;
        };
        return ownKeys(o);
    };
    return function (mod) {
        if (mod && mod.__esModule) return mod;
        var result = {};
        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
        __setModuleDefault(result, mod);
        return result;
    };
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const contexts_1 = require("../../../contexts/index.js");
const hooks_1 = require("../../../hooks/index.js");
const react_1 = __importStar(require("react"));
const react_i18next_1 = require("react-i18next");
const Translation_1 = require("translations/Translation");
const BookingAPI_1 = __importDefault(require("../../../api/BookingAPI"));
const BEButton_1 = __importDefault(require("../../generic/BEButton"));
const Headline_1 = __importDefault(require("../../generic/Headline"));
const SimpleModal_1 = __importStar(require("../../generic/modal/SimpleModal"));
const Text_1 = __importDefault(require("../../generic/Text"));
const HistoryConsistentPush_1 = require("../../../hooks/HistoryConsistentPush");
const StepAddon_1 = __importDefault(require("../../../pages/steps/StepAddon/StepAddon"));
const StepConfirmation_1 = __importDefault(require("../../../pages/steps/StepConfirmation/StepConfirmation"));
const DataLayer_1 = __importDefault(require("../../../util/DataLayer"));
const GetStepRoom_1 = __importDefault(require("../../../util/GetStepRoom"));
const ScreenSize_1 = __importDefault(require("../../../util/ScreenSize"));
const InactivityWindow = () => {
    const { t } = (0, react_i18next_1.useTranslation)();
    const { currentStep } = (0, react_1.useContext)(contexts_1.FullPageEngineContext);
    const { screenSize } = (0, react_1.useContext)(contexts_1.BookingEngineContext);
    const basketContext = (0, react_1.useContext)(contexts_1.BasketContext);
    const { hotel } = (0, hooks_1.useCurrentHotel)();
    const historyConsistentPush = (0, HistoryConsistentPush_1.useHistoryConsistentPush)();
    const [isInactive, setInactive] = (0, react_1.useState)(false);
    (0, react_1.useEffect)(() => {
        let inactivityTimeout;
        const resetTimeout = () => {
            clearTimeout(inactivityTimeout);
            if (!isInactive) {
                inactivityTimeout = setTimeout(() => {
                    setInactive(true);
                }, 300000); // 5 minutes
            }
        };
        resetTimeout();
        document.body.addEventListener('click', resetTimeout);
        document.body.addEventListener('mouseover', resetTimeout);
        document.body.addEventListener('keypress', resetTimeout);
        return () => {
            document.body.removeEventListener('click', resetTimeout);
            document.body.removeEventListener('mouseover', resetTimeout);
            document.body.removeEventListener('keypress', resetTimeout);
            clearTimeout(inactivityTimeout);
        };
    }, []);
    (0, react_1.useEffect)(() => {
        if (isInactive) {
            DataLayer_1.default.instance.sendAwayWindowOpen();
        }
    }, [isInactive]);
    const onClose = () => {
        setInactive(false);
    };
    const onReset = () => {
        var _a;
        setInactive(false);
        switch (currentStep) {
            case StepAddon_1.default:
            case StepConfirmation_1.default:
                historyConsistentPush((0, GetStepRoom_1.default)().getStepUrl());
                break;
        }
        if (basketContext.selectedBasketRow) {
            BookingAPI_1.default.Availability.invalidateAvailability(basketContext.selectedBasketRow, hotel === null || hotel === void 0 ? void 0 : hotel.hotelID);
            (_a = basketContext.selectedBasketRow) === null || _a === void 0 ? void 0 : _a.setStale(true);
            basketContext.updateBasketRow(basketContext.selectedBasketRow);
        }
    };
    return (react_1.default.createElement(SimpleModal_1.default, { size: SimpleModal_1.SimpleModalSize.ExtraSmall, open: isInactive, onClose: onClose, alignCenter: true },
        react_1.default.createElement("div", { className: "u-pad--heavy inactivity-window" },
            react_1.default.createElement("div", { className: "u-marg-bottom--heavy" },
                react_1.default.createElement(Headline_1.default, { bold: true }, t(Translation_1.Translation.Step.Room.YouHaveBeenAway))),
            react_1.default.createElement("div", { className: "u-marg-bottom--heavy" },
                react_1.default.createElement(Text_1.default, null, t(Translation_1.Translation.Step.Room.UpdateYourSearch))),
            react_1.default.createElement("div", { className: "u-flex inactivity-buttons" },
                react_1.default.createElement("div", { className: `u-marg-${screenSize > ScreenSize_1.default.Medium ? 'right' : 'bottom'}--light u-w-100` },
                    react_1.default.createElement(BEButton_1.default, { onClick: onClose, wide: true }, t(Translation_1.Translation.Step.Room.NoThanks))),
                react_1.default.createElement("div", { className: "u-w-100" },
                    react_1.default.createElement(BEButton_1.default, { onClick: onReset, wide: true, filled: true, primary: true }, t(Translation_1.Translation.Step.Room.Update)))))));
};
exports.default = InactivityWindow;
//# sourceMappingURL=InactivityWindow.js.map