#!/usr/bin/perl -w

use strict;
use ESL;
use Getopt::Long;

my $target="0435001122";

my $gateway = "sofia/gateway/external::Nexphone";

my $con = new ESL::ESLconnection("localhost", "8021", "ClueCon");
$con->events("plain","all");

my $uuid = $con->api("create_uuid")->getBody();

my $call_uuid="";
my $retry=1;

while ($retry) {
  $retry=0;
  my $res = $con->bgapi("originate", "{origination_uuid=$uuid,task=icinga,originate_timeout=25}$gateway/$target &playback('/root/test.wav')");
  my $job_uuid = $res->getHeader("Job-UUID");
  print "Call to $target has Job-UUID of $job_uuid and call uuid of $uuid \n";

  my $digitqueue;
  my $retrytime=time()+20;

  my $stay_connected = 1;
  while ( $stay_connected ) {
    my $e = $con->recvEventTimed(20);
    if ( $e ) {
        my $ev_name = $e->getHeader("Event-Name");
        # Should we check for the $job_uuid to match the background job ?                      
        if ( $ev_name eq 'BACKGROUND_JOB' ) {
            if ( $e->getHeader("Job-UUID") eq $job_uuid ) {
                my $call_result = $e->getBody();
                print "Result of call to $target was $call_result\n\n";
                if ($call_result =~ /\+OK/) {
                  $con->execute("uuid_media $uuid");
                  $con->execute("uuid_answer $uuid");
                  $retrytime=time()+120;
                } else {
                  $con->execute("hangup");
                  sleep(20);
                  $retry=1;
                  $stay_connected = 0;
                }
                
            }
        } elsif ( $ev_name eq 'DTMF' ) {
            my $digit = $e->getHeader("DTMF-Digit");
            $digitqueue.=$digit;
            print "Received DTMF digit: $digit\n";
            if ( $digitqueue =~ m/666/ ) {
                print "Exiting...\n";
                $stay_connected = 0;
                $con->execute("uuid_break all");
                $con->execute("playback('/usr/local/freeswitch/sounds/en/us/callie/voicemail/16000/vm-goodbye.wav')");
                sleep(5);
                $con->execute("hangup");
            }
        } else {
          print "Event: $ev_name\n"
        }
    } else {
    # do other things while waiting for events...                                              
      if (time() > $retrytime) {
        print "Callee did not answer, try again...";
        $con->execute("hangup");
        sleep(20);
        $retry=1;
        $stay_connected = 0;
      }


    }
  }
}
$con->execute("hangup");
$con->execute("hupall normal_clearing task icinga");
$con->api("uuid_kill",$uuid);

