#!/usr/bin/perl

use Parallel::Fork::BossWorker;

use strict;
use utils;
use connect;
use crypt;
use Switch;
use Term::ReadKey;
use Data::Dumper;
use Getopt::Std;

$| = 1;
our ($opt_i, $opt_o, $opt_p);

getopts('i:o:p');
my $input_file = $opt_i || 'hosts.json';
my $output_file = $opt_o || 'out.json';
my $save_pretty = $opt_p;

my $hosts;
$hosts->{'127.0.0.1'}->{flag} = 1;
$hosts->{test} = 1;
sub create_pool{
	my $topargs = shift;

	return Parallel::Fork::BossWorker->new (
		work_handler => sub {
      our $work = shift;
      $work = ping($work);
      return $work; # gets passed back to parent
		},
                result_handler => sub {
                   my $args = shift;
                   print Dumper($args);
                   foreach my $key (keys %{$args->{result}}){
                      print "copying key: $key\n";
                      $topargs->{hosts}->{$args->{hostname}}->{$key} = $args->{result}->{$key};
                      print Dumper($args);
                   }
                },
		worker_count => ($topargs->{worker_count}) || 1,
		);
}

my $pool = create_pool( {hosts => $hosts} );

    $pool->add_work({
       hostname => '127.0.0.1',
       host     => $hosts->{'127.0.0.1'},
       });
 

$pool->process();
print Dumper($hosts);