#!/usr/bin/perl -w
#


BEGIN {
	push(@INC, "../CTPort/");
};

#use Telephony::CTPort;
use CTPort;
use POSIX;
use IO::Handle;

sub master_loop();
sub logger($);
sub procargs(@);
sub daemonize($);

my $port=1208;
my $testcount=0;
my $suscount=0;
my $daemon=0;
my $ctport;
my $event_source;
my $ringcount=0;

procargs(@ARGV);
my $logfile="log/$port-master.log";
open (LOGFILE,">>$logfile");
autoflush LOGFILE 1;
daemonize($daemon);

logger("STARTUP: Connecting to CTServer on port $port.");
$ctport = new Telephony::CTPort($port);

while(1){
	master_loop();
	logger("Master : Sleepies");
	sleep 10;
	logger("Master : Wakies");
}

exit;

sub master_loop(){
	my $foo=1;
	$testcount++;
	logger("Master : Starting test loop ($testcount)");

	$ctport->start_ring_async();
	logger("Master : Ringing");
	#answered
	while($foo){
		($event_source,$event) = $ctport->wait_for_event(); 
		logger("Master : Got event [$event]");
		if ($event eq "pickup") {
			$foo=0;
		}
		elsif($event eq "ring"){
		}
		$ringcount++;
		if($ringcount>10){
			logger("Master : To many rings, pausing and restarting");
			$ctport->stop_ring();
			$ringcount = 0;
			sleep 10;
			return;
		}
	}
	$ctport->stop_ring();
	logger("Master : Stopped Ringing");
	#play 1
	$foo=1;
	my $dig ="";
	my $dropout=0;
	sleep 1;
	while($foo){
		$dig = $ctport->collect(1,5);
		logger("Master: Got digit [$dig]");
		if ($dig eq "1" ){
			$dial="6";	
			$foo=0;
		}
		elsif ($dig eq "2"){
			$dial="7";	
			$foo=0;
		}
		elsif ($dig eq "3"){
			$dial="8";	
			$foo=0;
		}
		elsif ($dig eq "4"){
			$dial="9";	
			$foo=0;
		}
		elsif ($dig eq "5"){
			$dial="0";	
			$foo=0;
		}
	}
	$foo=1;
	$buggeroff=0;
	sleep 1;
	while($foo){
		logger("Master : dialing [$dial]");
		$ctport->dial($dial);
		$ctport->clear();
		($event_source,$event) = $ctport->wait_for_event(); 
		logger("Master : Got event [$event]");
		if ($event eq "loop drop"){
			$foo=0;
		}
		elsif ($event eq "hangup"){
			$foo=0;
		}
		elsif ($event eq "dtmf"){
			$dig=$ctport->collect(1,1);
			logger("Master : Got dtmf [$dig]");
		}
		if($buggeroff++ > 10){
			$foo=0;
		}
	}
}



sub logger($){
	my $foo = strftime("%Y/%m/%d-%H:%M:%S",localtime(time));
	#print STDERR "$foo [$port] $_[0]\n";
	print LOGFILE "$foo [$port] $_[0]\n";
}

sub procargs(@){
	while($bit = shift @ARGV){
		if ($bit =~ /-d/){
			$daemon=1;
		}
		elsif($bit =~ /-p/){
			$port = 1200 + shift @ARGV;
		}
	}
}

sub daemonize($){
	if ($_[0] == 1){
		# make a daemon
		defined(my $pid = fork) or die "Can't fork: $!";
		exit if $pid;
#		setsid or die "Can't start a new session: $!";
		chdir '/' or die "Can't chdir to /: $!";
		umask 0;
		open STDIN, '/dev/null' or die "Can't read /dev/null: $!";
		open STDOUT, '/dev/null' or die "Can't write to /dev/null: $!";
	}
	return(1);
}

1;

