"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
    return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
    return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.RefreshGtfsTripDataTask = void 0;
const VPContainerToken_1 = require("../../../ioc/VPContainerToken");
const ProviderSourceTypeEnum_1 = require("../../../../../schema-definitions/vehicle-positions/models/enums/ProviderSourceTypeEnum");
const CoreToken_1 = require("@golemio/core/dist/helpers/ioc/CoreToken");
const workers_1 = require("@golemio/core/dist/integration-engine/workers");
const tsyringe_1 = require("@golemio/core/dist/shared/tsyringe");
const constants_1 = require("../constants");
const TripsRepository_1 = require("../data-access/TripsRepository");
/**
 * Updates GTFS trip data for realtime trips immediately following a GTFS timetable database refresh
 * - Identifies and corrects realtime trips using obsolete GTFS trip IDs (from the previous timetable)
 * - Refreshes GTFS trip data (route ID, block ID, headsign, etc.) based on updated GTFS trip IDs
 */
let RefreshGtfsTripDataTask = class RefreshGtfsTripDataTask extends workers_1.AbstractEmptyTask {
    constructor(logger, gtfsDataFixerFactory, tripRepository) {
        super(constants_1.WORKER_NAME);
        this.logger = logger;
        this.gtfsDataFixerFactory = gtfsDataFixerFactory;
        this.tripRepository = tripRepository;
        this.queueName = "refreshGTFSTripData";
        this.queueTtl = 10 * 60 * 1000; // 10 minutes
    }
    async execute() {
        // Find and fix realtime trips with invalid GTFS trip ID
        // HTTP trips
        const numOfHttpTrips = await this.gtfsDataFixerFactory.getStrategy(ProviderSourceTypeEnum_1.ProviderSourceTypeEnum.Http).fix(this.queuePrefix);
        this.logger.info(`${this.constructor.name}: ${numOfHttpTrips} HTTP trips with invalid GTFS trip ID detected and sent for fixing`);
        // Refresh GTFS trip data based on GTFS trip ID
        await this.tripRepository.refreshGtfsTripData();
    }
};
exports.RefreshGtfsTripDataTask = RefreshGtfsTripDataTask;
exports.RefreshGtfsTripDataTask = RefreshGtfsTripDataTask = __decorate([
    (0, tsyringe_1.injectable)(),
    __param(0, (0, tsyringe_1.inject)(CoreToken_1.CoreToken.Logger)),
    __param(1, (0, tsyringe_1.inject)(VPContainerToken_1.VPContainerToken.GtfsTripDataFixerFactory)),
    __param(2, (0, tsyringe_1.inject)(VPContainerToken_1.VPContainerToken.TripRepository)),
    __metadata("design:paramtypes", [Object, Object, TripsRepository_1.TripsRepository])
], RefreshGtfsTripDataTask);
//# sourceMappingURL=RefreshGtfsTripDataTask.js.map