var DeeplinkValidationService = /** @class */ (function () {
    function DeeplinkValidationService($http, $log, $q, $location, $routeParams, constants, utilityService) {
        this.validaterList = [];
        this.http = $http;
        this.log = $log;
        this.q = $q;
        this.constants = constants;
        this.location = $location;
        this.utilityService = utilityService;
        var route = $routeParams;
        // ##########################################################################################################################
        // Validater list er virker ikke for combi. Men det er ok, man kommer bare tilbage til starten! Det sker nok aldrig alligevel
        // Hvis den skal varieres, kan vi gøre det ved at lade modules (fx. combi) lave listen selv. 
        // ##########################################################################################################################
        this.validaterList.push({ ValidatorFunction: this.validateDateAndTimeState, PageLocation: PageLocations.PickTimeSlotPageLocation });
        //// TODO: Ny page location for nobasket og correctInceptionType
        //this.validaterList.push({ ValidatorFunction: this.validateNoBasket, PageLocation: PageLocations.SessionTimeOutErrorPageLocation });
        //this.validaterList.push({ ValidatorFunction: this.validateCorrectInceptionType, PageLocation: PageLocations.SessionTimeOutErrorPageLocation });
        // this.validaterList.push({ ValidatorFunction: this.validateVisitorDetailsState, PageLocation: PageLocations.VisitorDetailsPageLocation });
        this.validaterList.push({ ValidatorFunction: this.validateCustomerInformationState, PageLocation: PageLocations.YourInformationPageLocation });
        this.validaterList.push({ ValidatorFunction: this.validateReviewTicketsState, PageLocation: PageLocations.ReviewPageLocation });
        this.validaterList.push({ ValidatorFunction: this.validatePaymentState, PageLocation: PageLocations.PaymentPageLocation });
    }
    DeeplinkValidationService.prototype.validateCurrentPageLocation = function (pageLocation, initObject) {
        // 1) Check basket
        if (!initObject.HasBasket) {
            this.utilityService.redirectToErrorPage("InCriticalZone_NoBasket");
            return;
        }
        // 2) Check inceptiontype
        if (!this.isCorrectInceptionType(initObject)) {
            this.utilityService.redirectToErrorPage("InCriticalZone_WrongInceptionType");
            return;
        }
        // 3) Check correct saleschannel
        if (!this.isCorrectSalesChannel(initObject)) {
            this.utilityService.redirectToErrorPage("InCriticalZone_WrongSaleschannel");
            return;
        }
        var indexOfPageLocation = 0;
        for (var i = 0; i < this.validaterList.length; i++) {
            if (this.validaterList[i].PageLocation == pageLocation) {
                indexOfPageLocation = i;
            }
        }
        //The requested page is allowed
        if (this.validaterList[indexOfPageLocation].ValidatorFunction(initObject)) {
            return true;
        }
        else {
            this.findCorrectPage(indexOfPageLocation - 1, initObject);
            return false;
        }
    };
    DeeplinkValidationService.prototype.findCorrectPage = function (indexOfPageLocation, initObject) {
        if (this.validaterList[indexOfPageLocation].ValidatorFunction(initObject)) {
            this.location.path(this.utilityService.getLinkWithLanguage(this.validaterList[indexOfPageLocation].PageLocation, initObject.LanguageCode));
        }
        else {
            this.findCorrectPage(indexOfPageLocation - 1, initObject);
        }
    };
    DeeplinkValidationService.prototype.isCorrectInceptionType = function (initObject) {
        return (initObject.OrderInceptionType == TicketingViewModel.VMOrderInceptionType[TicketingViewModel.VMOrderInceptionType.Event]
            || initObject.OrderInceptionType == TicketingViewModel.VMOrderInceptionType[TicketingViewModel.VMOrderInceptionType.Standard]
            || initObject.OrderInceptionType == TicketingViewModel.VMOrderInceptionType[TicketingViewModel.VMOrderInceptionType.Tour]
            || initObject.OrderInceptionType == TicketingViewModel.VMOrderInceptionType[TicketingViewModel.VMOrderInceptionType.Combi]);
    };
    DeeplinkValidationService.prototype.isCorrectSalesChannel = function (initObject) {
        return initObject.ContentRootSalesChannelAlias == initObject.OrderSalesChannelAlias;
    };
    //vanilla flow
    //Page 1 - Validator function
    DeeplinkValidationService.prototype.validateDateAndTimeState = function (initObject) {
        return true;
    };
    //No longer a step in flow
    //Page 2 - TicketInformation Validator function
    //private validateVisitorDetailsState(initObject: TicketingViewModel.VMInitializationObject) {
    //    return initObject.OrderContentType == TicketingViewModel.VMOrderContentType[TicketingViewModel.VMOrderContentType.TimeSlotted];
    //}
    //Page 3 - Your information
    DeeplinkValidationService.prototype.validateCustomerInformationState = function (initObject) {
        return initObject.OrderProgress == TicketingViewModel.VMOrderProgressEnum[TicketingViewModel.VMOrderProgressEnum.CustomerDetails]
            || initObject.OrderProgress == TicketingViewModel.VMOrderProgressEnum[TicketingViewModel.VMOrderProgressEnum.TicketInformation]
            || initObject.OrderContentType == TicketingViewModel.VMOrderContentType[TicketingViewModel.VMOrderContentType.TourOnly]
            || initObject.OrderContentType == TicketingViewModel.VMOrderContentType[TicketingViewModel.VMOrderContentType.TimeSlotted];
    };
    //Page 4 - Review
    DeeplinkValidationService.prototype.validateReviewTicketsState = function (initObject) {
        return initObject.OrderProgress == TicketingViewModel.VMOrderProgressEnum[TicketingViewModel.VMOrderProgressEnum.CustomerDetails];
    };
    //Page 5 - payment
    DeeplinkValidationService.prototype.validatePaymentState = function (initObject) {
        return initObject.OrderProgress == TicketingViewModel.VMOrderProgressEnum[TicketingViewModel.VMOrderProgressEnum.CustomerDetails];
    };
    return DeeplinkValidationService;
}());
//# sourceMappingURL=deeplink-validation-service.js.map