#!/usr/bin/env perl

use strict;
use warnings;

use MYDan::Node;
use MYDan::Util::MIO::CMD;
use MYDan::Util::OptConf;

$| ++;

$MYDan::Util::OptConf::ARGC = -1;
@MYDan::Util::OptConf::CONF = qw( pass_through );

=head1 SYNOPSIS

 $0 -r range [--noop] [--verbose] cmd ..

    [--timeout seconds (default 300) ]
    [--max number (default 128) ]
    [--interchange (default {})]

  echo "input" |$0 -r range cmd

=cut
my $option = MYDan::Util::OptConf->load();
my %o = $option->get( qw( range=s timeout=i max=i interchange=s noop verbose ) )->dump();

$option->assert( 'range' );

my $range = MYDan::Node->new( $option->dump( 'range' ) );
my %cmd = map { $_ => \@ARGV } $range->load( delete $o{range} )->list();

my %result = MYDan::Util::MIO::CMD->new( %cmd )->run( %o );
my %mesg;

while ( my ( $io, $mesg ) = each %result )
{
    while ( my ( $mesg, $node ) = each %$mesg )
    {
        push @{ $mesg{$io} }, join ': ', $range->load( $node )->dump, $mesg;
    }
}

for my $io ( sort keys %mesg )
{
    print "\n---\n$io:\n";
    map { print "  $_" } @{ $mesg{$io} };
}

exit 0;
