#!/usr/bin/perl

eval 'exec /usr/bin/perl  -S $0 ${1+"$@"}'
    if 0; # not running under some shell
#
#   Wizard - A Perl package for implementing system administration
#            applications in the style of Windows wizards.
#
#
#   This module is
#
#           Copyright (C) 1999     Jochen Wiedmann
#                                  Am Eisteich 9
#                                  72555 Metzingen
#                                  Germany
#
#                                  Email: joe@ispsoft.de
#                                  Phone: +49 7123 14887
#
#                          and     Amarendran R. Subramanian
#                                  Grundstr. 32
#                                  72810 Gomaringen
#                                  Germany
#
#                                  Email: amar@ispsoft.de
#                                  Phone: +49 7072 920696
#
#   All Rights Reserved.
#
#   You may distribute under the terms of either the GNU General Public
#   License or the Artistic License, as specified in the Perl README file.
#

use strict;

use Getopt::Long ();
use Wizard::Examples::Apache::Admin;

############################################################################
#
#   Global variables
#
############################################################################

use vars qw($debug $verbose)


############################################################################
#
#   This is main()
#
############################################################################

{
    my %o;
    Getopt::Long::GetOptions('debug', 'help', 'host=s', 'server=s', 'start',
                             'stop', 'verbose');
    $debug = 1 if $o{'debug'};
    $o{'verbose'} = 1 if $debug || $o{'verbose'};

    if ($o{'start'}) {
        my $cnf = Wizard::Examples::Apache::Admin->new($o{'host'},
                                                       $o{'server'});
        eval {
            my($config, $interfaces) = $cnf->MakeHttpdConf();
            my $path = $cnf->{'server'}->{'apache-server-confpath'};
            if ((defined($config))
                 and (my $fh = IO::File->new($path, "r"))) {
                $fh->input_record_separator(undef);
	        undef $config if $fh->readline() ne $config;
            }
	    if (defined($config)) {
	        print "Creating new configuration in $path:\n$config\n"
		    if $verbose;
		unless ($debug) {
		    my $fh = IO::AtomicFile->open($path, "w")
		        or die "Failed to create config file $path: $!";
		    ((print $fh $config) and close($fh))
		        or die "Failed to write config file $path: $!";
		}
            } else {
		print "Keeping unmodified configuration in $path.\n";
            }
	    while (my($i, $ip) = each %$interfaces) {
		$cnf->IfUp($i, $ip);
            }
	    my $command = "$cnf->{'host'}->{'apache-host-apachectl'} start";
	    print "Starting Apache: $command\n" if $verbose;
            system $command unless $debug;
        };
        if ($@) {
            $cnf->Error("\nAn error occurred while creating the Apache"
                        . " servers configuration:\n\n$@\n");
        }
    } elsif ($o{'stop'}) {
        my $cnf = Wizard::Examples::Apache::Admin->new($o{'host'},
                                                       $o{'server'});
        eval {
	    my $command = "$cnf->{'host'}->{'apache-host-apachectl'} stop";
	    print "Stopping Apache: $command\n" if $verbose;
            system $command unless $debug;
        };
        if ($@) {
            $cnf->Error("\nAn error occurred while creating the Apache"
                        . " servers configuration:\n\n$@\n");
        }
    } else {
        Usage();
    }
}

