# -*- perl -*-


use strict;

package CHIRP::WriteConfig;


sub WriteConfig {
	my($config) = @_;

	print "# This configuration file brought to you by CHIRP!\n";
	print "# Please see http://honermann.net/software/CHIRP\n";
	print "\n";



	WriteConfigTagValue($config, "target", "--default--");

	WriteConfigSimple($config, "rra");
	WriteConfigSimple($config, "oid");
	WriteConfigSimple($config, "range");
	WriteConfigSimple($config, "color");

	WriteConfigText($config, "html");

	WriteConfigTagValue($config, "datasource", "--default--");
	WriteConfigTagValueNoDefault($config, "datasource");

	WriteConfigTagValue($config, "graph", "--default--");
	WriteConfigTagValueNoDefault($config, "graph");

	WriteConfigTagValue($config, "targettype", "--default--");
	WriteConfigTagValueNoDefault($config, "targettype");

	WriteConfigTagValueNoDefault($config, "target");

	WriteConfigTagValue($config, "map", "--default--");
	WriteConfigTagValueNoDefault($config, "map");

	WriteConfigTagValue($config, "event", "--default--");
	WriteConfigTagValueNoDefault($config, "event");

	return 0;
}

sub WriteConfigSimple {
	my($config, $dict) = @_;

	if (defined($config->{$dict})) {
		foreach my $item (sort keys % {$config->{$dict}}) {
			next if ($item =~ /^--order--$/);
			print $dict . "\t" . lc($item) . "\t" . $config->{$dict}->{$item} . "\n";
		}
		print "\n";
	}

	return 0;
}

sub WriteConfigText {
	my($config, $dict) = @_;

	if (defined($config->{$dict})) {
		foreach my $item (sort keys % {$config->{$dict}}) {
			next if ($item =~ /^--order--$/);
			print $dict . "\t" . lc($item) . "\n";
			foreach my $line (split(/\n/, $config->{$dict}->{$item})) {
				if($line =~ /^\s/) {
					print $line . "\n";
				} else {
					print "\t" . $line . "\n";
				}
			}
		}
		print "\n";
	}

	return 0;
}

sub WriteConfigTagValue {
	my($config, $dict, $item) = @_;

	if (defined($config->{$dict})) {
		if (defined($config->{$dict}->{$item})) {
			print $dict . "\t" . lc($item) . "\n";
			foreach my $tag (sort keys % {$config->{$dict}->{$item}}) {
# HACK HACK HACK - To deal with Cricket not correctly lowercasing in some circumstances
				if ($dict =~ /^target$/ && lc($tag) =~ /^targets$/) {
					print "\t" . lc($tag) . "\t= " . lc($config->{$dict}->{$item}->{$tag}) . "\n";
				} else {
					print "\t" . lc($tag) . "\t= " . $config->{$dict}->{$item}->{$tag} . "\n";
				}
			}
			print "\n";
		}
	}

	return 0;
}
sub WriteConfigTagValueNoDefault {
	my($config, $dict) = @_;

	if (defined($config->{$dict})) {
		foreach my $item (sort keys % {$config->{$dict}}) {
			next if ($item =~ /^--order--$/);
			if ($item !~ /^--default--$/) {
				WriteConfigTagValue($config, $dict, $item);
			}
		}
	}

	return 0;
}

1;