#!/usr/bin/env node

/**
 * generates triangles indices from delaunator;
 */

const {readFileSync, writeFileSync} = require('fs');
const Delaunator = require('delaunator');
const inputFile = process.argv[2];
const outputFile = process.argv[3];
const geoJson = JSON.parse(readFileSync(inputFile));

const n = geoJson.features.length;
const coords = new Float64Array(n * 2);
for(let i = 0; i < n; i++) {
    const f = geoJson.features[i];
    coords[2 * i] = f.geometry.coordinates[0];
    coords[2 * i + 1] = f.geometry.coordinates[1];
}

const start = Date.now();
const delaunator = new Delaunator(coords);
const end = Date.now();

console.log('points =', coords.length / 2);
console.log('miliseconds =', end - start);
console.log('triangles =', delaunator.triangles.length);

if (outputFile) {
    console.log('Saving to', outputFile)
    const trianglesAr = Array.from(delaunator.triangles);
    writeFileSync(outputFile, JSON.stringify(trianglesAr));
}

