#!/usr/bin/env node
(function () {
  "use strict";

  var walk = require('../lib/walk-jqueue-3'),
    count = 0;

  function sort(a,b) {
    a= a.toLowerCase();
    b= b.toLowerCase();
    if (a > b) return -1;
    if (a < b) return  1;
    else       return  0;
  }

  process.argv.forEach(function(startpath, index) {
    if (index > 1) {
      emitter = walk(startpath);

  // Non-`stat`ed Nodes
      /*
      emitter.on('name', function (path, file, stat) {
        count += 1;
        //console.log( ["[", count, "] ", path, '/', file].join('') )
        console.log( [path, '/', file].join('') )
      });
      emitter.on('names', function (path, files, stats) {
        files.sort(sort);
        //console.log('sort: ' + files.join(' ; '));
      });
      */


  // Single `stat`ed Nodes
      emitter.on('error', function (path, err, next) {
        // ignore
      });
      emitter.on('directoryError', function (path, stats, next) {
        next();
      });
      /*
      emitter.on('node', function (path, stat, next) {
        count += 1;
        console.log( [path, '/', stat.name].join('') )
        //console.log( ["[", count, "] ", path, '/', stat.name].join('') )
        next();
      });
      */
      emitter.on('file', function (path, stat, next) {
        count += 1;
        console.log( [path, '/', stat.name].join('') )
        //console.log( ["[", count, "] ", path, '/', stat.name].join('') )
        next();
      });
      emitter.on('directory', function (path, stat, next) {
        count += 1;
        console.log( [path, '/', stat.name].join('') )
        next();
      });
      emitter.on('symbolicLink', function (path, stat, next) {
        count += 1;
        console.log( [path, '/', stat.name].join('') )
        next();
      });
      /*
      */
      /*
      emitter.on('blockDevice', function (path, stat, next) {
        next();
      });
      emitter.on('characterDevice', function (path, stat, next) {
        next();
      });
      emitter.on('FIFO', function (path, stat, next) {
        next();
      });
      emitter.on('socket', function (path, stat, next) {
        next();
      });
      */

    // Grouped `stat`ed Nodes
      emitter.on('errors', function (path, stats, next) {
        next();
      });
      /*
      emitter.on('nodes', function (path, stats, next) {
        next();
      });
      */
      emitter.on('files', function (path, stats, next) {
        next();
      });
      emitter.on('directories', function (path, stats, next) {
        //delete stats[1];
        next();
      });
      emitter.on('symbolicLinks', function (path, stats, next) {
        next();
      });
      /*
      emitter.on('blockDevices', function (path, stats, next) {
        next();
      });
      emitter.on('characterDevices', function (path, stats, next) {
        next();
      });
      emitter.on('FIFOs', function (path, stats, next) {
        next();
      });
      emitter.on('sockets', function (path, stats, next) {
        next();
      });
      */

    // The end of all things
      emitter.on('end', function () {
        console.log("The eagle has landed.");
      });
    }
  });

}());