'use strict';

const u = require('universalify').fromCallback;
const fs = require('graceful-fs');
const path = require('path');
const mkdir = require('../mkdirs');
const remove = require('../remove');

const emptyDir = u(function emptyDir(dir, callback) {
  callback = callback || function () {};
  fs.readdir(dir, (err, items) => {
    if (err) return mkdir.mkdirs(dir, callback);

    items = items.map((item) => path.join(dir, item));

    deleteItem();

    function deleteItem() {
      const item = items.pop();
      if (!item) return callback();
      remove.remove(item, (err) => {
        if (err) return callback(err);
        deleteItem();
      });
    }
  });
});

function emptyDirSync(dir) {
  let items;
  try {
    items = fs.readdirSync(dir);
  } catch {
    return mkdir.mkdirsSync(dir);
  }

  items.forEach((item) => {
    item = path.join(dir, item);
    remove.removeSync(item);
  });
}

module.exports = {
  emptyDirSync,
  emptydirSync: emptyDirSync,
  emptyDir,
  emptydir: emptyDir,
};