#!/usr/bin/perl

=head1 DESCRIPTION

    Скрипт получает id релизных тикетов и пишет краткую информацию по ним: версии, статусы, названия.
    release-ticket-report DIRECT-65791 DIRECT-65900

=cut

use strict;
use warnings;

use Getopt::Long;
use JSON;
use Startrek::Client::Easy;

use utf8;
use open ':std' => ':utf8';

our %COMPONENTS = (
    31053 => 'App: java_api5',
    30820 => 'App: java_intapi',
    31819 => 'App: java_jobs',
    30439 => 'App: java_logviewer',
    34789 => 'App: java_web',
    41082 => 'App: java_user_action_log_writer',
    43064 => 'App: java_binlog_to_yt_sync',
    60208 => 'App: mysql2yt_full',
    45572 => 'App: java_binlog_recommendations_tracer',
    46886 => 'App: db_schema',
    49723 => 'App: binlogbroker',
    51952 => 'App: lb_moderation',
    9574  => 'Releases: Direct',
    52664 => 'App: user_action_log_lb_writer',
    53425 => 'App: ess_router',
    53465 => 'App: java_binlog_to_clh_sync',
    53505 => 'App: canvas', 
    72226 => 'App: oneshot',
    77495 => 'App: steps',
);

run() unless caller();

sub run
{
    my %O;
    GetOptions(
        'j|json' => \$O{as_json},
        'p|pretty-json' => \$O{as_pretty_json},
    ) || die "can't parse options, stop\n";

    my $st=Startrek::Client::Easy->new();
    for my $key (@ARGV){
        my $t = $st->get(key => $key);
        my @components = grep {$_} map { $COMPONENTS{$_} } @{$t->{components}};
        die "unexpected number of components: ".join(", ", @components) if @components != 1;
        die "can't parse summary for ticket $key ('$t->{summary}'), stop\n" unless $t->{summary} =~ /^[^:]+: *(.*?) +- +выложить +([0-9a-zA-Z~\.-]+)/;
        my ($title, $version) = ($1, $2);
        my $r = {
            key => $key, 
            version => $version,
            status => $t->{status},
            components => \@components,
            title => $title,
        };
        if ( $O{as_json} ){
            print to_json($r)."\n";
        } elsif( $O{as_pretty_json} ) {
            print to_json($r, {pretty => 1});
        } else {
            print "$key $version $t->{status} / ".join(", ", @components)." / $title\n";
        }
    }
}

