<?php
/**
 * Zend Framework
 *
 * LICENSE
 *
 * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://framework.zend.com/license/new-bsd
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@zend.com so we can send you a copy immediately.
 *
 * @category   Zend
 * @package    Zend_Service
 * @subpackage DeveloperGarden
 * @copyright  Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 * @version    $Id$
 */

/**
 * @see Zend_Service_DeveloperGarden_Client_ClientAbstract
 */
require_once 'Zend/Service/DeveloperGarden/Client/ClientAbstract.php';

/**
 * @see Zend_Service_DeveloperGarden_Request_VoiceButler_NewCall
 */
require_once 'Zend/Service/DeveloperGarden/Request/VoiceButler/NewCall.php';

/**
 * @see Zend_Service_DeveloperGarden_Request_VoiceButler_NewCallSequenced
 */
require_once 'Zend/Service/DeveloperGarden/Request/VoiceButler/NewCallSequenced.php';

/**
 * @see Zend_Service_DeveloperGarden_Request_VoiceButler_TearDownCall
 */
require_once 'Zend/Service/DeveloperGarden/Request/VoiceButler/TearDownCall.php';

/**
 * @see Zend_Service_DeveloperGarden_Request_VoiceButler_CallStatus
 */
require_once 'Zend/Service/DeveloperGarden/Request/VoiceButler/CallStatus.php';

/**
 * @see Zend_Service_DeveloperGarden_Response_VoiceButler_NewCallResponse
 */
require_once 'Zend/Service/DeveloperGarden/Response/VoiceButler/NewCallResponse.php';

/**
 * @see Zend_Service_DeveloperGarden_Response_VoiceButler_NewCallSequencedResponse
 */
require_once 'Zend/Service/DeveloperGarden/Response/VoiceButler/NewCallSequencedResponse.php';

/**
 * @see Zend_Service_DeveloperGarden_Response_VoiceButler_TearDownCallResponse
 */
require_once 'Zend/Service/DeveloperGarden/Response/VoiceButler/TearDownCallResponse.php';

/**
 * @see Zend_Service_DeveloperGarden_Response_VoiceButler_CallStatusResponse
 */
require_once 'Zend/Service/DeveloperGarden/Response/VoiceButler/CallStatusResponse.php';

/**
 * @see Zend_Service_DeveloperGarden_Response_VoiceButler_CallStatus2Response
 */
require_once 'Zend/Service/DeveloperGarden/Response/VoiceButler/CallStatus2Response.php';

/**
 * @category   Zend
 * @package    Zend_Service
 * @subpackage DeveloperGarden
 * @copyright  Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
 * @author     Marco Kaiser
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 */
class Zend_Service_DeveloperGarden_VoiceCall
    extends Zend_Service_DeveloperGarden_Client_ClientAbstract
{
    /**
     * wsdl file
     *
     * @var string
     */
    protected $_wsdlFile = 'https://gateway.developer.telekom.com/p3gw-mod-odg-voicebutler/services/VoiceButlerService?wsdl';

    /**
     * wsdl file local
     *
     * @var string
     */
    protected $_wsdlFileLocal = 'Wsdl/VoiceButlerService.wsdl';

    /**
     * Response, Request Classmapping
     *
     * @var array
     *
     */
    protected $_classMap = array(
        'newCallResponse'          => 'Zend_Service_DeveloperGarden_Response_VoiceButler_NewCallResponse',
        'newCallSequencedResponse' => 'Zend_Service_DeveloperGarden_Response_VoiceButler_NewCallSequencedResponse',
        'tearDownCallResponse'     => 'Zend_Service_DeveloperGarden_Response_VoiceButler_TearDownCallResponse',
        'callStatusResponse'       => 'Zend_Service_DeveloperGarden_Response_VoiceButler_CallStatusResponse',
        'callStatus2Response'      => 'Zend_Service_DeveloperGarden_Response_VoiceButler_CallStatus2Response'
    );

    /**
     * init a new call with the given params
     *
     * @param string $aNumber
     * @param string $bNumber
     * @param integer $expiration
     * @param integer $maxDuration
     * @param integer $account
     * @param boolean $privacyA
     * @param boolean $privacyB
     * @param string $greeter
     * @return Zend_Service_DeveloperGarden_Response_VoiceButler_NewCallResponse
     */
    public function newCall($aNumber, $bNumber, $expiration, $maxDuration,
        $account = null, $privacyA = null, $privacyB = null, $greeter = null
    ) {
        $request = new Zend_Service_DeveloperGarden_Request_VoiceButler_NewCall(
                $this->getEnvironment()
        );
        $request->setANumber($aNumber)
                ->setBNumber($bNumber)
                ->setPrivacyA($privacyA)
                ->setPrivacyB($privacyB)
                ->setExpiration($expiration)
                ->setMaxDuration($maxDuration)
                ->setGreeter($greeter)
                ->setAccount($account);
        $result = $this->getSoapClient()->newCall(array(
            'request' => $request
        ));

        return $result->parse();
    }


    /**
     * init a new call with the given params but specially here,
     * you can define a set of numbers to be called if the first number
     * isnt reachable (ie: bNumber = +4930-111111,+4930-222222,+4930-333333)
     *
     * @throws Zend_Service_DeveloperGarden_Client_Exception
     * @param string $aNumber
     * @param array $bNumber
     * @param integer $expiration
     * @param integer $maxDuration
     * @param integer $maxWait
     * @param integer $account
     * @param boolean $privacyA
     * @param boolean $privacyB
     * @param string $greeter
     * @return Zend_Service_DeveloperGarden_Response_VoiceButler_NewCallSequencedResponse
     */
    public function newCallSequenced($aNumber, $bNumber, $expiration, $maxDuration,
        $maxWait, $account = null, $privacyA = null, $privacyB = null, $greeter = null
    ) {
        $request = new Zend_Service_DeveloperGarden_Request_VoiceButler_NewCallSequenced(
                $this->getEnvironment()
        );
        $request->setANumber($aNumber)
                ->setBNumber($bNumber)
                ->setPrivacyA($privacyA)
                ->setPrivacyB($privacyB)
                ->setExpiration($expiration)
                ->setMaxDuration($maxDuration)
                ->setMaxWait($maxWait)
                ->setGreeter($greeter)
                ->setAccount($account);
        $result = $this->getSoapClient()->newCallSequenced(array(
            'request' => $request
        ));

        return $result->parse();
    }

    /**
     * This tear down the call with the given sessionId
     *
     * @param string $sessionId
     * @return Zend_Service_DeveloperGarden_Response_VoiceButler_TearDownCallResponse
     */
    public function tearDownCall($sessionId)
    {
        $request = new Zend_Service_DeveloperGarden_Request_VoiceButler_TearDownCall(
            $this->getEnvironment(),
            $sessionId
        );
        $result = $this->getSoapClient()->tearDownCall(array(
            'request' => $request
        ));

        return $result->parse();
    }

    /**
     * checks the callStatus and updates the keepAlive if provided
     *
     * @param string $sessionId
     * @param integer $keepAlive
     * @return Zend_Service_DeveloperGarden_Response_VoiceButler_CallStatusResponse
     */
    public function callStatus($sessionId, $keepAlive = null)
    {
        $request = new Zend_Service_DeveloperGarden_Request_VoiceButler_CallStatus(
            $this->getEnvironment(),
            $sessionId,
            $keepAlive
        );

        $result = $this->getSoapClient()->callStatus2(array(
            'request' => $request
        ));

        return $result->parse();
    }
}