const OSRM = require('../../');
const {performance, createHistogram} = require('node:perf_hooks');

// usage: node test/nodejs/benchmark.js berlin-latest.osrm 13.388860,52.517037;13.385983,52.496891
const args = process.argv.slice(2);
const path = args[0] || require('./constants').mld_data_path;

function parseWaypoints(waypoints) {
    if (waypoints == undefined) {
        return undefined;
    }
    return waypoints.split(';').map((waypoint) => {
        const [lon, lat] = waypoint.split(',');
        return [parseFloat(lon), parseFloat(lat)];
    });
}
const waypoints = parseWaypoints(args[1]) || [[7.41337, 43.72956],[7.41546, 43.73077]];
const osrm = new OSRM({path, algorithm: 'MLD'});

async function route(coordinates) {
    const promise = new Promise((resolve, reject) => {
        osrm.route({coordinates, steps: true, overview: 'full'}, (err, result) => {
            if (err) {
                reject(err);
            } else {
                resolve(result);
            }
        });
    });
    return promise;
}

async function benchmark() {
    // warmup
    await route(waypoints);

    const performanceHistorgram = createHistogram();

    for (let i = 0; i < 1000; i++) {
        const start = performance.now();
        await route(waypoints);
        const end = performance.now();
        // record result in microseconds
        performanceHistorgram.record(Math.ceil((end - start) * 1000));
    }


    console.log(performanceHistorgram);
}
benchmark();