The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';

use Whisper;
use Getopt::Long;
use JSON;
use Data::Dumper;

my $params = {};
GetOptions( \%$params, 'from=i', 'until=i', 'json', 'format', 'date-format=s' );

my @commands = qw( info fetch );
my @formats = qw( tuples );

sub usage {
	say "$0 <cmd> <file> [ --from <timestamp> ] [ --until <timestamp> ] [ --json ] [ --format <format> [ --date-format <strftime> ]]";
	say "	commands:	".join(", ",@commands);
	say "	formats:	".join(", ",@formats);
	exit 1;
}

my $cmd = shift || usage();
my $wsp_file = shift || usage();

unless( grep(/$cmd/, @commands )) {
	usage();
}

unless( -e $wsp_file ) {
	die("File $wsp_file does not exist\n");
}

if( $cmd eq "info" ) {
	my $info = wsp_info( file => $wsp_file );

	if( $params->{json} ) {
		say eval{ to_json($info) };
	} else {
		say Dumper($info);
	}
}
elsif( $cmd eq "fetch" ) {

	my $from = $params->{from};
	my $until = $params->{until};
	my $data = wsp_fetch(
		file => $wsp_file,
		from => $from,
		until => $until,
		format => $params->{format},
		date_format => $params->{'date-format'}
	);

	if( $params->{json} ) {
		say eval{ to_json($data) };
	} else {
		say Dumper($data);
	}

}