The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Tapper::CLI::Testrun::Command::updatequeue;
our $AUTHORITY = 'cpan:TAPPER';
$Tapper::CLI::Testrun::Command::updatequeue::VERSION = '4.1.7';
use 5.010;

use strict;
use warnings;
no warnings "experimental::smartmatch";

use parent 'App::Cmd::Command';

use Tapper::Cmd::Queue;
use Tapper::Model 'model';


sub abstract {
        'Update an existing queue'
}


my $options =  {
                "verbose"          => { text => "some more informational output", short => 'v' },
                "name"             => { text => "TEXT; name of the queue to be changed",    type => 'string' },
                "priority"         => { text => "INT; priority", type => 'string', short => 'p' },
                "active"           => { text => "set active flag to this value, prepend with no to unset", type => 'withno' },
                };

sub opt_spec {
        my @opt_spec;
        foreach my $key (keys %$options) {
                my $pushkey = $key;
                $pushkey    = $pushkey."|".$options->{$key}->{short} if $options->{$key}->{short};

                given($options->{$key}->{type}){
                        when ("string")        {$pushkey .="=s";}
                        when ("withno")        {$pushkey .="!";}
                        when ("manystring")    {$pushkey .="=s@";}
                        when ("optmanystring") {$pushkey .=":s@";}
                        when ("keyvalue")      {$pushkey .="=s%";}
                }
                push @opt_spec, [$pushkey, $options->{$key}->{text}];
        }
        return (
                @opt_spec
               );
}


sub usage_desc
{
        "tapper-testrun updatequeue --name=s --priority=s [ --verbose ]";
}

sub validate_args
{
        my ($self, $opt, $args) = @_;

        say "Missing argument --name"         unless  $opt->{name};
        say "Missing argument what to change" unless  exists($opt->{priority}) or exists($opt->{active});

        return 1 if $opt->{name} and (exists($opt->{priority}) or exists($opt->{active}));

        die $self->usage->text;
}

sub update_queue
{
        my ($self, $opt, $args) = @_;


        my $queue = model('TestrunDB')->resultset('Queue')->search({name => $opt->{name}}, {rows => 1})->first;

        my $cmd = Tapper::Cmd::Queue->new();
        my $new_opts = {};

        $new_opts->{priority} = $opt->{priority} if defined($opt->{priority});
        $new_opts->{active}   = $opt->{active}   if defined($opt->{active});

        my $queue_id = $cmd->update($queue->id, $new_opts);
        die "Can't create new queue because of an unknown error" if not $queue_id;

        if ($opt->{verbose}) {
                $queue = model('TestrunDB')->resultset('Queue')->find($queue_id);
                say join " | ", ($queue->name, $queue->priority, $queue->active ? 'active' : 'not active');
        } else {
                say $queue_id;
        }
}

sub execute
{
        my ($self, $opt, $args) = @_;

        $self->update_queue ($opt, $args);
}


# perl -Ilib bin/tapper-testrun newqueue --name="xen-3.2" --priority=200

1;

__END__

=pod

=encoding UTF-8

=head1 NAME

Tapper::CLI::Testrun::Command::updatequeue

=head1 AUTHOR

AMD OSRC Tapper Team <tapper@amd64.org>

=head1 COPYRIGHT AND LICENSE

This software is Copyright (c) 2015 by Advanced Micro Devices, Inc..

This is free software, licensed under:

  The (two-clause) FreeBSD License

=cut