"use strict";
// Node module dependencies
const fs = require('fs-extra-promise').useFs(require('fs-extra')),
  queue = require('queue'),
  path = require('path'),
  exec = require('child-process-promise').exec;


const ROOT = path.resolve(path.join(__dirname, '../../')),
  DIST = path.resolve(ROOT, 'dist', '@ionic-native');

const FLAGS = '--access public'; // add any flags here if you want... (example: --tag alpha)

const PACKAGES = fs.readdirSync(DIST);

const failedPackages = [];

const QUEUE = queue({
  concurrency: 10
});

PACKAGES.forEach(packageName => {

  QUEUE.push(done => {

    console.log(`Publishing @ionic-native/${packageName}`);
    const packagePath = path.resolve(DIST, packageName);
    exec(`npm publish ${packagePath} ${FLAGS}`)
      .then(() => done())
      .catch((e) => {
        if (e.stderr && e.stderr.indexOf('previously published version') === -1) {
          failedPackages.push({
            cmd: e.cmd,
            stderr: e.stderr
          });
        }
        done();
      });

  });

});

QUEUE.start((err) => {

  if (err) {
    console.log('Error publishing ionic-native. ', err);
  } else if (failedPackages.length > 0) {
    console.log(`${failedPackages.length} packages failed to publish.`);
    console.log(failedPackages);
  } else {
    console.log('Done publishing ionic-native!');
  }



});