#!/usr/bin/env node

import { Command } from 'commander';
import { parse } from '../dist/index.es.js';

import { readFile, writeFile } from 'node:fs';
import { join } from 'node:path';

const command = new Command();

command
  .usage('[coordinatePrecision] [extrasPrecision] input output')
  .option(
    '-p, --precision [coordinatePrecision]',
    'Output precision, defaults to 6',
    '6'
  )
  .option(
    '-e, --extras-precision [extrasPrecision]',
    'Output precision for extra coordinates beyond X and Y, such as Z. Defaults to 2',
    '2'
  )
  .option('--ignore-point [ignorePoint]', 'Ignore Points.')
  .option('--ignore-line-string [ignoreLineString]', 'Ignore LineStrings.')
  .option('--ignore-polygon [ignorePolygon]', 'Ignore Polygons.')
  .option(
    '--remove-duplicates [removeDuplicates]',
    'Remove consecutive duplicate points.'
  )
  .parse(process.argv);

if (command.args.length < 2) {
  console.error('An input and output file is required');
  command.help();
} else {
  const inputPath =
    command.args[0].indexOf('/') < 0
      ? join(process.cwd(), command.args[0])
      : command.args[0];

  readFile(inputPath, (readError, data) => {
    if (readError) {
      console.error(readError);
      command.help();
    }
    const outPath =
      command.args[1].indexOf('/') < 0
        ? join(process.cwd(), command.args[1])
        : command.args[1];

    writeFile(
      outPath,
      JSON.stringify(
        parse(
          JSON.parse(data.toString()),
          command.getOptionValue('precision'),
          command.getOptionValue('extras-precision'),
          {
            ignorePoint: command.getOptionValue('ignore-point') ? true : false,
            ignoreLineString: command.getOptionValue('ignore-line-string')
              ? true
              : false,
            ignorePolygon: command.getOptionValue('ignore-polygon')
              ? true
              : false,
            removeDuplicates: command.getOptionValue('remove-duplicates')
              ? true
              : false,
          }
        )
      ),
      error => {
        if (error) {
          console.error(error);
          command.help();
          return;
        }
        process.exit();
      }
    );
  });
}
