#!/usr/bin/env perl

# program to define multiple distribution targets
# use with care

use warnings;
use strict;

use Getopt::Long qw( GetOptions :config auto_help auto_version gnu_getopt );
use Pod::Usage qw( pod2usage );

my ( $stage, $dist_group, $filter, $clean, $disable, $save_temps);

my $dbname;

GetOptions(
           'stage=s'    => \$stage,
           'dist_group=s' => \$dist_group,
           'filter=s'   => \$filter,
           'clean'      => \$clean,
           'disable'    => \$disable,
           'dbname=s'   => \$dbname,
	   'save-temps' => \$save_temps,
) or pod2usage( 2 );

pod2usage( -msg => "Unknown option: @ARGV", -exitval => 2 ) if @ARGV;
pod2usage( -msg => "Required options: --stage --dist_group --dbname",
           -exitval => 3)
    unless defined $stage
    and defined $dist_group
    and defined $dbname;  

my @all_filters = qw( g r i z y ); 
my @all_stages = qw( raw chip camera fake warp stack diff );

my @filters;
if ($filter) {
    die "$filter is not a known filter\n" if ! in_list($filter, \@all_filters);
    push @filters, $filter;
} else {
    @filters = @all_filters;
}

my @stages;
if ($stage eq "all") {
    @stages = @all_stages;
} else {
    @stages = ($stage);
}
my @dist_groups = ($dist_group);

foreach my $this_dist_group (@dist_groups) {
  foreach my $stage (@stages) {
    foreach $filter (@filters) {
        my $command = "disttool -definetarget -stage $stage -dist_group $this_dist_group -filter $filter.00000";
        $command .= " -clean" if $clean;
        $command .= " -set_state disabled" if $disable;
        $command .= " -dbname $dbname" if $dbname;

        print "$command\n";
        my $code = system $command;
        my $status = $code >> 8;
        die "$command failed with $code $status\n" if $code;
    }
  }
}

sub in_list {
    my $val = shift;
    my $array = shift;

    foreach my $a (@$array) {
        return 1 if $a eq $val;
    }
    return 0;
}
