#!/usr/bin/perl -w

use strict;
use warnings;

use File::Basename;
use ALTLinux::RepoList;
use ALTLinux::RepoList::CLI;
use Source::Shared::CLI;
our @ISA = qw/Source::Shared::CLI/;

my $verbose=0;
$verbose=1 if $ENV{TERM}; # not to pollute cron mail

my $opt_arch;
our @LONGOPT=(
    'arch=s' => \$opt_arch,
    );
sub print_longopt {
    print "  altlinux-repolist options:
	--arch noarch,x86_64 the arches to use (default is all)
";
}
sub cli_container_ref {
    return ['ALTLinux::RepoList::CLI'];
}

# ------------------------------------------------------------

my $out_bin_names= $0 =~ /-to-bin-names$/;
my $out_bin_files= $0 =~ /-to-bin-files$/;
my $out_src_names= $0 =~ /-to-src-names$/;
my $out_src_files= $0 =~ /-to-src-files$/;
my $in_bin_names= $0 =~ /-bin-names-to-/;
my $in_bin_files= $0 =~ /-bin-files-to-/;
my $in_src_names= $0 =~ /-src-names-to-/;
my $in_src_files= $0 =~ /-src-files-to-/;

$ALTLinux::RepoList::CLI::need_bin=1 if $in_bin_names or $in_bin_files or $out_bin_names or $out_bin_files;
$ALTLinux::RepoList::CLI::need_src=1 if $in_src_names or $in_src_files or $out_src_names or $out_src_files;

__PACKAGE__->new()->get_and_process_cli_options();

my %arch_to_use;
sub process_options {
    map {$arch_to_use{$_}=1}  split(',',$opt_arch) if $opt_arch;
}

my (%srcname2srpm,%srpm2srpmpath,%srpm2srcname);
&ALTLinux::RepoList::process_src_lists(
    sub {
	my ($name,$evr,$srpm,$reporoot)=@_;
	$srcname2srpm{$name}=$srpm;
	$srpm2srcname{$srpm}=$name;
	$srpm2srpmpath{$srpm}=$reporoot.'/files/SRPMS/'.$srpm;
    },
    @ALTLinux::RepoList::CLI::srclists
    );
my (%in_srpm,@src_missing);
if ($in_src_names) {
    my @IN=grep { if (!defined($srcname2srpm{$_})) { push @src_missing, $_; 0} else { 1} } @ALTLinux::RepoList::CLI::IN;
    map {$in_srpm{$srcname2srpm{$_}}=1} @IN;
    map {$in_srpm{basename($_)}=1} @IN;
}
if ($out_src_names) {
    print map {$_."\n"} sort {$a cmp $b} map {$srpm2srcname{$_}} keys(%in_srpm);
    exit;
} elsif ($out_src_files) {
    print map {$_."\n"} sort {$a cmp $b} map {$srpm2srpmpath{$_}} keys(%in_srpm);
}

my %out_brpms;
my %out_bnames;
&ALTLinux::RepoList::process_bin_lists(
    sub {
	my ($name,$evr,$arch,$rpm,$srpm,$reporoot)=@_;
	return if $opt_arch and not $arch_to_use{$arch};
	if ($in_srpm{$srpm}) {
	    my $path=$reporoot.'/files/'.$arch.'/RPMS/'.$rpm;
	    $out_bnames{$name}=1;
	    $out_brpms{$path}=1;
	}
    },
    @ALTLinux::RepoList::CLI::binlists
    );

print map {$_."\n"} sort {$a cmp $b} keys(%out_bnames) if $out_bin_names;
print map {$_."\n"} sort {$a cmp $b} keys(%out_brpms) if $out_bin_files;

warn "WARNING: src names not found: ", join(' ',@src_missing),"\n";
# ------------------------------------------------------------
