#!/usr/bin/perl 

use warnings;
use strict;
use FindBin;
use DNStools::Config qw(get_config);

my %config;

if (@ARGV < 2) {
    print "usage: zone-mk kundennummer domain ... \n";
    exit 1;
}

# oeffnet Konfigurations- und Templatefiles - relativ oder absolut
my @configs = ("$FindBin::Bin/dnstools.conf", "/etc/dnstools.conf");
my @templc = (
    "$FindBin::Bin/templates/named.config",
    "/etc/dnstools/templates/named.config"
);
my @templz =
  ("$FindBin::Bin/templates/named.zone", "/etc/dnstools/templates/named.zone");

for (grep { -f } @templc) {
    open(TEMPCONF, $_) or die "Can't open $_: $!\n";
}
unless (seek(TEMPCONF, 0, 0)) {
    die "Can't open template (searched: @templc)\n";
}

for (grep { -f } @templz) {
    open(TEMPZONE, $_) or die "Can't open $_: $!\n";
}
unless (seek(TEMPZONE, 0, 0)) {
    die "Can't open template (searched: @templz)\n";
}


%config = get_config(@configs);

my $primary       = $config{primary};
my $secondary     = $config{secondary};
my $zone_conf_dir = $config{zone_conf_dir};
my $master_dir    = $config{master_dir};
my $customer      = shift @ARGV;
chomp(my $primary_ip   = `dig +short $primary`);
chomp(my $secondary_ip = `dig +short $secondary`);
chomp(my $this_host    = `hostname -f`);
chomp(my $this_ip      = `hostname -i`);
chomp(my $this_domain  = `hostname -d`);
chomp(my $time         = `date +%Y%m%d00`);
chomp(my $start        = `date -I`);
my $hostmaster = "hostmaster.$this_domain";

unless (-d $master_dir and -r $master_dir) {
    die "$master_dir: $!\n";
}

unless (-d $zone_conf_dir and -r $zone_conf_dir) {
    die "$master_dir: $!\n";
}

# legt fuer jede domain in @ARGV ein verzeichnis in $master_dir an.
# schreibt aus den angegebenen templates die dateien $zonefile und $config
# in die entsprechenden verzeichnisse.
for (@ARGV) {

    chomp(my $domain = `idn --quiet "$_"`);
    my $zonefile   = "$master_dir/$domain/$domain";
    my $config     = "$zone_conf_dir/$domain";
    my $utf8domain = "$_";

    unless (-d "$master_dir/$domain") {
        `mkdir $master_dir/$domain`;
    }

    if (-f $zonefile) {
        $zonefile =~ s#/.*/##;
        print "$zonefile exists. Skipping $domain\n";
        next;
    }
    if (-f $config) {
        $config =~ s#/.*/##;
        print "$config exists. Skipping $domain\n";
        next;
    }

    print "$domain ($_) for $customer \n";

    my @tempzone = <TEMPZONE>;
    for (@tempzone) {
        s#<start>#$start#;
        s#<domain>#$domain#;
        s#<time>#$time#;
        s#<primary>#$primary#;
        s#<secondary>#$secondary#;
        s#<hostmaster>#$hostmaster#;
        s#<customer>#$customer#;
        s#<utf8domain>#$utf8domain#;
    }

    open(ZONEOUT, ">$zonefile");
    print ZONEOUT @tempzone;
    close(ZONEOUT);

    my @tempconf = <TEMPCONF>;
    for (@tempconf) {
        s#<domain>#$domain#;
        s#<start>#$start#;
        s#<customer>#$customer#;
        s#<utf8domain>#$utf8domain#;
        s#<file>#$master_dir/$domain/$domain#;
        s#<primary_ip>#$primary_ip#;
        s#<secondary_ip>#$secondary_ip#;
    }

    open(CONFOUT, ">$config");
    print CONFOUT @tempconf;
    close(CONFOUT);
}
