#!/usr/bin/perl -w
use v5.14;

use Gruntmaster::Data;

use IO::Prompter [ -style => 'bold', '-stdio', '-verbatim' ];
use POSIX qw/strftime/;

##################################################

my $dsn = $ENV{GRUNTMASTER_DSN} // 'dbi:Pg:';
my $db = Gruntmaster::Data->connect($dsn);

sub cmd_help{
	exec perldoc => $0
}

sub cmd_show{
	my %columns = $db->job(shift)->get_columns;
	$columns{date} = strftime '%c', localtime $columns{date};
	$columns{private} = $columns{private} ? 'yes' : 'no';

	print <<END
Date: $columns{date}
Owner: $columns{owner}
Problem: $columns{problem}
Format: $columns{format}
Daemon: $columns{daemon}
Result text: $columns{result_text}
Private: $columns{private}
END
}

sub cmd_rm{
	$db->job(shift)->delete
}

sub cmd_get{
	my ($id, $col) = @_;
	say $db->job($id)->get_column($col)
}

sub cmd_set{
	my ($id, %values) = @_;
	$db->job($id)->update(\%values)
}

sub cmd_rerun{
	$db->job(shift)->rerun
}

##################################################

my $cmd = 'cmd_' . shift;
cmd_help unless exists $main::{$cmd};
no strict 'refs';
$cmd->(@ARGV) if exists $main::{$cmd};

1;
__END__

=encoding utf-8

=head1 NAME

gruntmaster-job - shell interface to Gruntmaster 6000 job log

=head1 SYNOPSIS

  gruntmaster-job show id
  gruntmaster-job rm id
  gruntmaster-job get id key
  gruntmaster-job set id key value
  gruntmaster-job rerun id

=head1 DESCRIPTION

gruntmaster-job is a tool for managing jobs.

=over

=item B<show> I<id>

Prints detailed information about the job with id I<id>.

=item B<rm> I<id>

Removes the job with id I<id>.

=item B<set> I<id> I<key> I<value>

Sets the I<key> configuration option of job I<id> to I<value>.

=item B<get> I<id> I<key>

Get the value of the I<key> configuration option of job I<id>.

=item B<rerun> I<id>

Reruns job I<id>.

=back

=head1 AUTHOR

Marius Gavrilescu E<lt>marius@ieval.roE<gt>

=head1 COPYRIGHT AND LICENSE

Copyright (C) 2014 by Marius Gavrilescu

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.18.1 or,
at your option, any later version of Perl 5 you may have available.


=cut