#! /usr/bin/perl

use Getopt::Long;

# whitelist
@text_domains{qw (
  packages-qt control-center storage iso-languages iso-countries packages
  packagemanager base control rpm-groups pkg-bindings
)} = ();

GetOptions(
  'dir|d=s'   => \$opt_dir,
  'files'     => \$opt_files,
  'domains:s' => \$opt_domains,
);

die "usage: unused_mos: [--files] [--domains[=domain_file]] --dir yast2_dir\n" unless -d $opt_dir;

if($opt_domains) {
  map { chomp; $text_domains{$_} = 1 } (`cat $opt_domains`);
}
else {
  for (`grep -r 'textdomain' $opt_dir 2>/dev/null`) {
    if(/(:|<<)\s*textdomain\s*\"(\S+)\"/) {
      $text_domains{$2} = 1;
    }
    elsif(/:\s*textdomain\s*\(\"(\S+)\"\)/) {
      $text_domains{$1} = 1;
    }
    else {
      # print STDERR "ooh: $_";
    }
  }
}

for ( <$opt_dir/locale/*/LC_MESSAGES/*.mo> ) {
  if(m#/([^/]+)\.mo$# && !exists $text_domains{$1}) {
    push @files, $_;
    $size += -s;
  }
}

if($opt_files) {
  print join("\n", sort @files), "\n";
}
elsif(defined($opt_domains) && !$opt_domains) {
  print "$_\n" for (sort keys %text_domains);
}
else {
  print "Used Text Domains:\n";
  for (sort keys %text_domains) {
    print "  $_\n";
  }
  printf "Saved Size: %d MB\n", $size >> 20;
}

