#!/usr/bin/perl
# This file was preprocessed, do not edit!


use warnings;
use strict;
use Debconf::Template::Transient;
use Getopt::Long;

print STDERR "debconf-getlang: This utility is deprecated; you should switch to using the po-debconf package.\n";


sub usage {
	print STDERR <<EOF;
Usage:
  debconf-getlang lang master [translation]
  debconf-getlang --stats master translation [...]
EOF
	exit 1;
}

Debconf::Template::Transient->i18n(0);

my $stats=0;
GetOptions(
	'stats|s' => \$stats,
) or usage;

if ($stats) {
	my $master=shift || usage;
	foreach my $fn (@ARGV) {
		my ($lang)=$fn=~m/\.([^.]+)$/;
		getlang($lang, $master, $fn);
	}
}
else {
	my $lang=shift || usage;
	my $fn=shift || usage;
	my $lfn=shift;
	getlang($lang, $fn, $lfn);
}

sub getlang {
	my $lang=lc(shift);
	my $fn=shift;
	my $lfn=shift;

	my %master;
	my @out;
	foreach my $in (Debconf::Template::Transient->load($fn)) {
		my $out=Debconf::Template::Transient->new($in->template);

		foreach my $field ($in->fields) {
			next if $field eq 'template';
			if ($field =~ m/-(..(_..)?)$/) {
				if ($1 eq $lang) {
					$out->$field($in->$field());
				}
			}
			else {
				$out->$field($in->$field());
			}
		}

		$master{$out->template}=$out;
		push @out, $out;
	}

	my %localized;
	if ($lfn) {
		foreach my $in (Debconf::Template::Transient->load($lfn)) {
			$localized{$in->template}=$in;
		}
	}


	my $good=0;
	my $fuzzy=0;
	my $bad=0;

	foreach my $master (@out) {
		my $localized=$localized{$master->template};

		my @needfields=qw{description};
		if ($master->type !~ /^((multi)?select|note|error|boolean)$/) {
			push @needfields, 'default' if defined $master->default;
		}
		if ($master->type =~ /(multi)?select/) {
			push @needfields, 'choices';
		}

		if ($localized) {
			foreach my $field (@needfields) {
				my $field_lang="$field-$lang";
				my $field_ext="extended_$field";
				my $field_lang_ext="extended_$field_lang";

				my $value=$master->$field;
				next unless defined $value;
				next unless defined $localized->$field_lang;
				$value.="\n".$master->$field_ext
					if defined $master->$field_ext;
				my $lvalue='';
				$lvalue=$localized->$field
					if defined $localized->$field;
				$lvalue.="\n".$localized->$field_ext
					if defined $localized->$field_ext;

				$value=~s/^\s+//gm;
				$value=~s/\s+$//gm;
				$value=~tr/ \t\n/ /s;
				$lvalue=~s/^\s+//gm;
				$lvalue=~s/\s+$//gm;
				$lvalue=~tr/ \t\n/ /s;

				my $old="$field_lang-fuzzy";
				my $old_ext="extended_$old";
				if (defined $localized->$old &&
				    $localized->$field_lang eq "") {
					$fuzzy++;
					$master->$old($localized->$old);
					$master->$old_ext($localized->$old_ext)
						if defined $localized->$old_ext;
					$master->$field_lang("");
				}
				elsif ($value eq $lvalue) {
					$good++;
					$master->$field_lang($localized->$field_lang);
					$master->$field_lang_ext($localized->$field_lang_ext)
						if defined $localized->$field_lang_ext;
				}
				else {
					$fuzzy++;
					$master->$old($localized->$field_lang);
					$master->$old_ext($localized->$field_lang_ext)
						if defined $localized->$field_lang_ext;
					$master->$field_lang("");
				}
			}
		}

		foreach my $field (@needfields) {
			my $field_lang="$field-$lang";
			unless (defined $master->$field_lang) {
				$bad++;
				$master->$field_lang("");
			}
		}
	}

	if (! $stats) {
		print Debconf::Template::Transient->stringify(@out) unless $stats;
	}
	else {
		print "$lang: ".join(', ', grep { $_ ne "" }
			$good  ? "$good translated strings"  : "",
			$fuzzy ? "$fuzzy fuzzy translations" : "",
			$bad   ? "$bad untranslated strings" : "",
		)."\n";
	}
}

