#!/usr/bin/perl
#
# FreeSWITCH SIP Setup Assistant v1.0
# Brian K. West <brian.west@mac.com>
#
#

use Data::Dumper;
use File::Copy;


my $PREFIX = "/usr/local/freeswitch";

my $providers = {
    "1" => "FWD",
    "2" => "SP",
    "3" => "IS",
    "4" => "AL",
    "5" => "SB",
    "6" => "VU"
    };


my $FWD = {
    "type" => "network",
    "register" => "true",
    "fields" => [number, password, extension],
    "domain" => "pulver.com",
    "dialprefix" => "1-393"
    };

my $SIPHONE = {
    "type" => "network",
    "register" => "true",
    "fields" => [username, password, extension],
    "domain" => "sipphone.com",
    "dialprefix" => "1-747, 1-222"
    };

my $IDEASIP = {
    "type" => "network",
    "register" => "true",
    "fields" => [username, password, extension],
    "domain" => "ideasip.com",
    "dialprefix" => "1-101"
    };

my $VOIPUSER = {
    "type" => "network",
    "register" => "true",
    "fields" => [username, password, extension],
    "domain" => "voipuser.org"
    };

my $ASTERLINK = {
    "type" => "pstn",
    "register" => "true",
    "fields" => [username, password, extension],
    "domain" => "asterlink.com",
};

my $SIPBROKER = {
    "type" => "peer",
    "domain" => "sipbroker.com",
    "dialprefix" => "*XXX"
    };

my $TEMPLATES = {
    "FWD" => $FWD,
    "SP" => $SIPPHONE,
    "IS" => $IDEASIP,
    "AL" => $ASTERLINK,
    "SB" => $SIPBROKER,
    "VU" => $VOIPUSER
    };

print "\n" x 60;
&welcome;

sub welcome {
    print <<WELCOME

	Welcome to the FreeSWITCH setup assistant.

	1. Configure Free World Dialup
	2. Configure SIPPhone.com
	3. Configure ideaSIP.com
	4. Configure Asterlink.com
	5. Configure SIPBroker.com
	6. Configure voipuser.org

	X. Exit

WELCOME
;
    print "Which provider do you wish to setup? ";
    my $i = <STDIN>;
    chomp($i);
    if ($i =~ m/X|x/) {
	print "Thanks you!\n"; exit;
    } elsif ($i > 6) {
	print "Invalid Choice\n"; &welcome;
    } else {
	if (exists($providers->{$i})) {
	    configure_sip_provider($providers->{$i});
	}
    };
    &welcome;
}

sub configure_sip_provider($) {
    my $provider = shift;
    my $template = $TEMPLATES->{$provider};
    my $config;
    my $check = 1;
    foreach $field (@{$template->{fields}}) {
	print "\nPlease your $template->{domain} $field: ";
	$tmp = "$provider" . uc($field);
	$i = <STDIN>;
	chomp($i);
	$config->{$tmp} = $i;
    }

    while($check) {
	$check = &are_you_sure;
    };

    if ($template->{type} eq "network" || $template->{type} eq "pstn") {
	do_config($provider, $config);
    }
    if ($template->{dialprefix}) {
	enable_extension($provider, $config);
    }
    print "\n\n\nConfiguration Complete!!!\n\n\n\n\n";
    sleep(2);
    &welcome;
}

sub enable_extension($$) {
    my $provider = shift;
    my $config = shift;

    my $todo = $TEMPLATES->{$provider};

    copy("$PREFIX/conf/dialplan/extensions/$todo->{domain}.noload", "$PREFIX/conf/dialplan/extensions/$todo->{domain}.xml");
    print "\nExtension prefix $todo->{dialprefix} enabled for dialing $todo->{domain}...\n";
}

sub do_config($$) {
    my $provider = shift;
    my $config = shift;
    my $todo = $TEMPLATES->{$provider};

    open(TEMPLATE, "<$PREFIX/conf/directory/default/$todo->{domain}.noload");
    @lines = <TEMPLATE>;
    close(TEMPLATE);
    open(CONFIG, ">$PREFIX/conf/directory/default/$todo->{domain}.xml");
    foreach $line (@lines) {
	foreach $key (sort keys %{$config}) {
	    $line =~ s/%$key%/$config->{$key}/g;
	}
	print CONFIG $line;
    }
    close(CONFIG);
    print "Config Created...\n";
}

sub are_you_sure {
    my $sure = 1;
    while($sure) {
	print "Are you sure? (yes/no)";
	$i = <STDIN>;
	chomp($i);
	if($i =~ m/No|no|NO|n/) {
	    &welcome;
	} elsif ($i =~ m/Yes|yes|YES|y/) {
	    return 0;
	}
    }
}