#!/usr/bin/env python
# vim: sw=3 et:
'''
Copyright (C) 2011, Digium, Inc.
Matthew Nicholson <mnicholson@digium.com>

This program is free software, distributed under the terms of
the GNU General Public License Version 2.
'''

import sys
import logging
import os
import re
import shutil

from twisted.internet import reactor

sys.path.append("lib/python")
from asterisk.asterisk import Asterisk
from asterisk.test_case import TestCase

logger = logging.getLogger(__name__)

class T38Test(TestCase):
   event_count = 0
   success_count = 0

   def __init__(self):
      TestCase.__init__(self)
      self.reactor_timeout = 120
      self.create_asterisk(2)

      # copy the tiff file we are going to send to a good known location
      shutil.copy("%s/send.tiff" % (os.path.dirname(os.path.realpath(__file__)),), "%s%s" % (self.ast[0].base, self.ast[0].directories['astdatadir']))

   def ami_connect(self, ami):
      if ami.id == 0:

         ami.registerEvent('UserEvent', self.fax_result)
         df = ami.originate("PJSIP/ast2-t38/sip:1234@127.0.0.2", "sendfax", "1234", 1)

         def handle_failure(reason):
            logging.error("error sending originate:")
            logging.error(reason.getTraceback())
            self.stop_reactor()

            return reason

         df.addErrback(handle_failure)

   def fax_result(self, ami, event):
      if event['userevent'] != 'FaxStatus':
         return

      if event['status'] == "SUCCESS":
         self.passed = True
      else:
         logging.error("error sending fax through t38:")
         logging.error("operation: %s" % (event['operation'],))
         logging.error("status: %s" % (event['status'],))
         logging.error("error: %s" % (event['error'],))
         logging.error("statusstr: %s" % (event['statusstr'],))

      self.stop_reactor()

   def run(self):
      TestCase.run(self)
      self.create_ami_factory(2)


def main():
   test = T38Test()
   reactor.run()

   if not test.passed:
      return 1

   return 0

if __name__ == "__main__":
   sys.exit(main() or 0)

