<?php

/**
 * This code was generated by
 * \ / _    _  _|   _  _
 * | (_)\/(_)(_|\/| |(/_  v1.0.0
 * /       /
 */

namespace Twilio\Rest\Taskrouter\V1\Workspace\Task;

use Twilio\Options;
use Twilio\Values;

abstract class ReservationOptions {
    /**
     * @param string $reservationStatus Returns the list of reservations for a task
     *                                  with a specified ReservationStatus
     * @return ReadReservationOptions Options builder
     */
    public static function read($reservationStatus = Values::NONE) {
        return new ReadReservationOptions($reservationStatus);
    }

    /**
     * @param string $reservationStatus New reservation status
     * @param string $workerActivitySid New worker activity sid if rejecting a
     *                                  reservation
     * @param string $instruction Assignment instruction for reservation
     * @param string $dequeuePostWorkActivitySid New worker activity sid after
     *                                           executing a Dequeue instruction
     * @param string $dequeueFrom Caller ID for the call to the worker when
     *                            executing a Dequeue instruction
     * @param string $dequeueRecord Attribute to record both legs of a call when
     *                              executing a Dequeue instruction
     * @param integer $dequeueTimeout Timeout for call when executing a Dequeue
     *                                instruction
     * @param string $dequeueTo Contact URI of the worker when executing a Dequeue
     *                          instruction
     * @param string $dequeueStatusCallbackUrl Callback URL for completed call
     *                                         event when executing a Dequeue
     *                                         instruction
     * @param string $callFrom Caller ID for the outbound call when executing a
     *                         Call instruction
     * @param string $callRecord Attribute to record both legs of a call when
     *                           executing a Call instruction
     * @param integer $callTimeout Timeout for call when executing a Call
     *                             instruction
     * @param string $callTo Contact URI of the worker when executing a Call
     *                       instruction
     * @param string $callUrl TwiML URI executed on answering the worker's leg as a
     *                        result of the Call instruction
     * @param string $callStatusCallbackUrl Callback URL for completed call event
     *                                      when executing a Call instruction
     * @param boolean $callAccept Flag to determine if reservation should be
     *                            accepted when executing a Call instruction
     * @param string $redirectCallSid Call sid of the call parked in the queue when
     *                                executing a Redirect instruction
     * @param boolean $redirectAccept Flag to determine if reservation should be
     *                                accepted when executing a Redirect instruction
     * @param string $redirectUrl TwiML URI to redirect the call to when executing
     *                            the Redirect instruction
     * @param string $to Contact URI of the worker when executing a Conference
     *                   instruction
     * @param string $from Caller ID for the call to the worker when executing a
     *                     Conference instruction
     * @param string $statusCallback The status_callback
     * @param string $statusCallbackMethod The status_callback_method
     * @param string $statusCallbackEvent The status_callback_event
     * @param integer $timeout Timeout for call when executing a Conference
     *                         instruction
     * @param boolean $record The record
     * @param boolean $muted The muted
     * @param string $beep The beep
     * @param boolean $startConferenceOnEnter The start_conference_on_enter
     * @param boolean $endConferenceOnExit The end_conference_on_exit
     * @param string $waitUrl The wait_url
     * @param string $waitMethod The wait_method
     * @param boolean $earlyMedia The early_media
     * @param integer $maxParticipants The max_participants
     * @param string $conferenceStatusCallback The conference_status_callback
     * @param string $conferenceStatusCallbackMethod The
     *                                               conference_status_callback_method
     * @param string $conferenceStatusCallbackEvent The
     *                                              conference_status_callback_event
     * @param string $conferenceRecord The conference_record
     * @param string $conferenceTrim The conference_trim
     * @param string $recordingChannels The recording_channels
     * @param string $recordingStatusCallback The recording_status_callback
     * @param string $recordingStatusCallbackMethod The
     *                                              recording_status_callback_method
     * @param string $conferenceRecordingStatusCallback The
     *                                                  conference_recording_status_callback
     * @param string $conferenceRecordingStatusCallbackMethod The
     *                                                        conference_recording_status_callback_method
     * @param string $region The region
     * @param string $sipAuthUsername The sip_auth_username
     * @param string $sipAuthPassword The sip_auth_password
     * @param string $dequeueStatusCallbackEvent Call progress events sent via
     *                                           webhooks as a result of a Dequeue
     *                                           instruction
     * @param string $postWorkActivitySid New worker activity sid after executing a
     *                                    Conference instruction
     * @param string $supervisorMode Supervisor mode when executing the Supervise
     *                               instruction
     * @param string $supervisor Supervisor sid/uri when executing the Supervise
     *                           instruction
     * @param boolean $endConferenceOnCustomerExit The
     *                                             end_conference_on_customer_exit
     * @param boolean $beepOnCustomerEntrance The beep_on_customer_entrance
     * @return UpdateReservationOptions Options builder
     */
    public static function update($reservationStatus = Values::NONE, $workerActivitySid = Values::NONE, $instruction = Values::NONE, $dequeuePostWorkActivitySid = Values::NONE, $dequeueFrom = Values::NONE, $dequeueRecord = Values::NONE, $dequeueTimeout = Values::NONE, $dequeueTo = Values::NONE, $dequeueStatusCallbackUrl = Values::NONE, $callFrom = Values::NONE, $callRecord = Values::NONE, $callTimeout = Values::NONE, $callTo = Values::NONE, $callUrl = Values::NONE, $callStatusCallbackUrl = Values::NONE, $callAccept = Values::NONE, $redirectCallSid = Values::NONE, $redirectAccept = Values::NONE, $redirectUrl = Values::NONE, $to = Values::NONE, $from = Values::NONE, $statusCallback = Values::NONE, $statusCallbackMethod = Values::NONE, $statusCallbackEvent = Values::NONE, $timeout = Values::NONE, $record = Values::NONE, $muted = Values::NONE, $beep = Values::NONE, $startConferenceOnEnter = Values::NONE, $endConferenceOnExit = Values::NONE, $waitUrl = Values::NONE, $waitMethod = Values::NONE, $earlyMedia = Values::NONE, $maxParticipants = Values::NONE, $conferenceStatusCallback = Values::NONE, $conferenceStatusCallbackMethod = Values::NONE, $conferenceStatusCallbackEvent = Values::NONE, $conferenceRecord = Values::NONE, $conferenceTrim = Values::NONE, $recordingChannels = Values::NONE, $recordingStatusCallback = Values::NONE, $recordingStatusCallbackMethod = Values::NONE, $conferenceRecordingStatusCallback = Values::NONE, $conferenceRecordingStatusCallbackMethod = Values::NONE, $region = Values::NONE, $sipAuthUsername = Values::NONE, $sipAuthPassword = Values::NONE, $dequeueStatusCallbackEvent = Values::NONE, $postWorkActivitySid = Values::NONE, $supervisorMode = Values::NONE, $supervisor = Values::NONE, $endConferenceOnCustomerExit = Values::NONE, $beepOnCustomerEntrance = Values::NONE) {
        return new UpdateReservationOptions($reservationStatus, $workerActivitySid, $instruction, $dequeuePostWorkActivitySid, $dequeueFrom, $dequeueRecord, $dequeueTimeout, $dequeueTo, $dequeueStatusCallbackUrl, $callFrom, $callRecord, $callTimeout, $callTo, $callUrl, $callStatusCallbackUrl, $callAccept, $redirectCallSid, $redirectAccept, $redirectUrl, $to, $from, $statusCallback, $statusCallbackMethod, $statusCallbackEvent, $timeout, $record, $muted, $beep, $startConferenceOnEnter, $endConferenceOnExit, $waitUrl, $waitMethod, $earlyMedia, $maxParticipants, $conferenceStatusCallback, $conferenceStatusCallbackMethod, $conferenceStatusCallbackEvent, $conferenceRecord, $conferenceTrim, $recordingChannels, $recordingStatusCallback, $recordingStatusCallbackMethod, $conferenceRecordingStatusCallback, $conferenceRecordingStatusCallbackMethod, $region, $sipAuthUsername, $sipAuthPassword, $dequeueStatusCallbackEvent, $postWorkActivitySid, $supervisorMode, $supervisor, $endConferenceOnCustomerExit, $beepOnCustomerEntrance);
    }
}

class ReadReservationOptions extends Options {
    /**
     * @param string $reservationStatus Returns the list of reservations for a task
     *                                  with a specified ReservationStatus
     */
    public function __construct($reservationStatus = Values::NONE) {
        $this->options['reservationStatus'] = $reservationStatus;
    }

    /**
     * Returns the list of reservations for a task with a specified ReservationStatus
     * 
     * @param string $reservationStatus Returns the list of reservations for a task
     *                                  with a specified ReservationStatus
     * @return $this Fluent Builder
     */
    public function setReservationStatus($reservationStatus) {
        $this->options['reservationStatus'] = $reservationStatus;
        return $this;
    }

    /**
     * Provide a friendly representation
     * 
     * @return string Machine friendly representation
     */
    public function __toString() {
        $options = array();
        foreach ($this->options as $key => $value) {
            if ($value != Values::NONE) {
                $options[] = "$key=$value";
            }
        }
        return '[Twilio.Taskrouter.V1.ReadReservationOptions ' . implode(' ', $options) . ']';
    }
}

class UpdateReservationOptions extends Options {
    /**
     * @param string $reservationStatus New reservation status
     * @param string $workerActivitySid New worker activity sid if rejecting a
     *                                  reservation
     * @param string $instruction Assignment instruction for reservation
     * @param string $dequeuePostWorkActivitySid New worker activity sid after
     *                                           executing a Dequeue instruction
     * @param string $dequeueFrom Caller ID for the call to the worker when
     *                            executing a Dequeue instruction
     * @param string $dequeueRecord Attribute to record both legs of a call when
     *                              executing a Dequeue instruction
     * @param integer $dequeueTimeout Timeout for call when executing a Dequeue
     *                                instruction
     * @param string $dequeueTo Contact URI of the worker when executing a Dequeue
     *                          instruction
     * @param string $dequeueStatusCallbackUrl Callback URL for completed call
     *                                         event when executing a Dequeue
     *                                         instruction
     * @param string $callFrom Caller ID for the outbound call when executing a
     *                         Call instruction
     * @param string $callRecord Attribute to record both legs of a call when
     *                           executing a Call instruction
     * @param integer $callTimeout Timeout for call when executing a Call
     *                             instruction
     * @param string $callTo Contact URI of the worker when executing a Call
     *                       instruction
     * @param string $callUrl TwiML URI executed on answering the worker's leg as a
     *                        result of the Call instruction
     * @param string $callStatusCallbackUrl Callback URL for completed call event
     *                                      when executing a Call instruction
     * @param boolean $callAccept Flag to determine if reservation should be
     *                            accepted when executing a Call instruction
     * @param string $redirectCallSid Call sid of the call parked in the queue when
     *                                executing a Redirect instruction
     * @param boolean $redirectAccept Flag to determine if reservation should be
     *                                accepted when executing a Redirect instruction
     * @param string $redirectUrl TwiML URI to redirect the call to when executing
     *                            the Redirect instruction
     * @param string $to Contact URI of the worker when executing a Conference
     *                   instruction
     * @param string $from Caller ID for the call to the worker when executing a
     *                     Conference instruction
     * @param string $statusCallback The status_callback
     * @param string $statusCallbackMethod The status_callback_method
     * @param string $statusCallbackEvent The status_callback_event
     * @param integer $timeout Timeout for call when executing a Conference
     *                         instruction
     * @param boolean $record The record
     * @param boolean $muted The muted
     * @param string $beep The beep
     * @param boolean $startConferenceOnEnter The start_conference_on_enter
     * @param boolean $endConferenceOnExit The end_conference_on_exit
     * @param string $waitUrl The wait_url
     * @param string $waitMethod The wait_method
     * @param boolean $earlyMedia The early_media
     * @param integer $maxParticipants The max_participants
     * @param string $conferenceStatusCallback The conference_status_callback
     * @param string $conferenceStatusCallbackMethod The
     *                                               conference_status_callback_method
     * @param string $conferenceStatusCallbackEvent The
     *                                              conference_status_callback_event
     * @param string $conferenceRecord The conference_record
     * @param string $conferenceTrim The conference_trim
     * @param string $recordingChannels The recording_channels
     * @param string $recordingStatusCallback The recording_status_callback
     * @param string $recordingStatusCallbackMethod The
     *                                              recording_status_callback_method
     * @param string $conferenceRecordingStatusCallback The
     *                                                  conference_recording_status_callback
     * @param string $conferenceRecordingStatusCallbackMethod The
     *                                                        conference_recording_status_callback_method
     * @param string $region The region
     * @param string $sipAuthUsername The sip_auth_username
     * @param string $sipAuthPassword The sip_auth_password
     * @param string $dequeueStatusCallbackEvent Call progress events sent via
     *                                           webhooks as a result of a Dequeue
     *                                           instruction
     * @param string $postWorkActivitySid New worker activity sid after executing a
     *                                    Conference instruction
     * @param string $supervisorMode Supervisor mode when executing the Supervise
     *                               instruction
     * @param string $supervisor Supervisor sid/uri when executing the Supervise
     *                           instruction
     * @param boolean $endConferenceOnCustomerExit The
     *                                             end_conference_on_customer_exit
     * @param boolean $beepOnCustomerEntrance The beep_on_customer_entrance
     */
    public function __construct($reservationStatus = Values::NONE, $workerActivitySid = Values::NONE, $instruction = Values::NONE, $dequeuePostWorkActivitySid = Values::NONE, $dequeueFrom = Values::NONE, $dequeueRecord = Values::NONE, $dequeueTimeout = Values::NONE, $dequeueTo = Values::NONE, $dequeueStatusCallbackUrl = Values::NONE, $callFrom = Values::NONE, $callRecord = Values::NONE, $callTimeout = Values::NONE, $callTo = Values::NONE, $callUrl = Values::NONE, $callStatusCallbackUrl = Values::NONE, $callAccept = Values::NONE, $redirectCallSid = Values::NONE, $redirectAccept = Values::NONE, $redirectUrl = Values::NONE, $to = Values::NONE, $from = Values::NONE, $statusCallback = Values::NONE, $statusCallbackMethod = Values::NONE, $statusCallbackEvent = Values::NONE, $timeout = Values::NONE, $record = Values::NONE, $muted = Values::NONE, $beep = Values::NONE, $startConferenceOnEnter = Values::NONE, $endConferenceOnExit = Values::NONE, $waitUrl = Values::NONE, $waitMethod = Values::NONE, $earlyMedia = Values::NONE, $maxParticipants = Values::NONE, $conferenceStatusCallback = Values::NONE, $conferenceStatusCallbackMethod = Values::NONE, $conferenceStatusCallbackEvent = Values::NONE, $conferenceRecord = Values::NONE, $conferenceTrim = Values::NONE, $recordingChannels = Values::NONE, $recordingStatusCallback = Values::NONE, $recordingStatusCallbackMethod = Values::NONE, $conferenceRecordingStatusCallback = Values::NONE, $conferenceRecordingStatusCallbackMethod = Values::NONE, $region = Values::NONE, $sipAuthUsername = Values::NONE, $sipAuthPassword = Values::NONE, $dequeueStatusCallbackEvent = Values::NONE, $postWorkActivitySid = Values::NONE, $supervisorMode = Values::NONE, $supervisor = Values::NONE, $endConferenceOnCustomerExit = Values::NONE, $beepOnCustomerEntrance = Values::NONE) {
        $this->options['reservationStatus'] = $reservationStatus;
        $this->options['workerActivitySid'] = $workerActivitySid;
        $this->options['instruction'] = $instruction;
        $this->options['dequeuePostWorkActivitySid'] = $dequeuePostWorkActivitySid;
        $this->options['dequeueFrom'] = $dequeueFrom;
        $this->options['dequeueRecord'] = $dequeueRecord;
        $this->options['dequeueTimeout'] = $dequeueTimeout;
        $this->options['dequeueTo'] = $dequeueTo;
        $this->options['dequeueStatusCallbackUrl'] = $dequeueStatusCallbackUrl;
        $this->options['callFrom'] = $callFrom;
        $this->options['callRecord'] = $callRecord;
        $this->options['callTimeout'] = $callTimeout;
        $this->options['callTo'] = $callTo;
        $this->options['callUrl'] = $callUrl;
        $this->options['callStatusCallbackUrl'] = $callStatusCallbackUrl;
        $this->options['callAccept'] = $callAccept;
        $this->options['redirectCallSid'] = $redirectCallSid;
        $this->options['redirectAccept'] = $redirectAccept;
        $this->options['redirectUrl'] = $redirectUrl;
        $this->options['to'] = $to;
        $this->options['from'] = $from;
        $this->options['statusCallback'] = $statusCallback;
        $this->options['statusCallbackMethod'] = $statusCallbackMethod;
        $this->options['statusCallbackEvent'] = $statusCallbackEvent;
        $this->options['timeout'] = $timeout;
        $this->options['record'] = $record;
        $this->options['muted'] = $muted;
        $this->options['beep'] = $beep;
        $this->options['startConferenceOnEnter'] = $startConferenceOnEnter;
        $this->options['endConferenceOnExit'] = $endConferenceOnExit;
        $this->options['waitUrl'] = $waitUrl;
        $this->options['waitMethod'] = $waitMethod;
        $this->options['earlyMedia'] = $earlyMedia;
        $this->options['maxParticipants'] = $maxParticipants;
        $this->options['conferenceStatusCallback'] = $conferenceStatusCallback;
        $this->options['conferenceStatusCallbackMethod'] = $conferenceStatusCallbackMethod;
        $this->options['conferenceStatusCallbackEvent'] = $conferenceStatusCallbackEvent;
        $this->options['conferenceRecord'] = $conferenceRecord;
        $this->options['conferenceTrim'] = $conferenceTrim;
        $this->options['recordingChannels'] = $recordingChannels;
        $this->options['recordingStatusCallback'] = $recordingStatusCallback;
        $this->options['recordingStatusCallbackMethod'] = $recordingStatusCallbackMethod;
        $this->options['conferenceRecordingStatusCallback'] = $conferenceRecordingStatusCallback;
        $this->options['conferenceRecordingStatusCallbackMethod'] = $conferenceRecordingStatusCallbackMethod;
        $this->options['region'] = $region;
        $this->options['sipAuthUsername'] = $sipAuthUsername;
        $this->options['sipAuthPassword'] = $sipAuthPassword;
        $this->options['dequeueStatusCallbackEvent'] = $dequeueStatusCallbackEvent;
        $this->options['postWorkActivitySid'] = $postWorkActivitySid;
        $this->options['supervisorMode'] = $supervisorMode;
        $this->options['supervisor'] = $supervisor;
        $this->options['endConferenceOnCustomerExit'] = $endConferenceOnCustomerExit;
        $this->options['beepOnCustomerEntrance'] = $beepOnCustomerEntrance;
    }

    /**
     * New reservation status
     * 
     * @param string $reservationStatus New reservation status
     * @return $this Fluent Builder
     */
    public function setReservationStatus($reservationStatus) {
        $this->options['reservationStatus'] = $reservationStatus;
        return $this;
    }

    /**
     * New worker activity sid if rejecting a reservation
     * 
     * @param string $workerActivitySid New worker activity sid if rejecting a
     *                                  reservation
     * @return $this Fluent Builder
     */
    public function setWorkerActivitySid($workerActivitySid) {
        $this->options['workerActivitySid'] = $workerActivitySid;
        return $this;
    }

    /**
     * Assignment instruction for reservation
     * 
     * @param string $instruction Assignment instruction for reservation
     * @return $this Fluent Builder
     */
    public function setInstruction($instruction) {
        $this->options['instruction'] = $instruction;
        return $this;
    }

    /**
     * New worker activity sid after executing a Dequeue instruction
     * 
     * @param string $dequeuePostWorkActivitySid New worker activity sid after
     *                                           executing a Dequeue instruction
     * @return $this Fluent Builder
     */
    public function setDequeuePostWorkActivitySid($dequeuePostWorkActivitySid) {
        $this->options['dequeuePostWorkActivitySid'] = $dequeuePostWorkActivitySid;
        return $this;
    }

    /**
     * Caller ID for the call to the worker when executing a Dequeue instruction
     * 
     * @param string $dequeueFrom Caller ID for the call to the worker when
     *                            executing a Dequeue instruction
     * @return $this Fluent Builder
     */
    public function setDequeueFrom($dequeueFrom) {
        $this->options['dequeueFrom'] = $dequeueFrom;
        return $this;
    }

    /**
     * Attribute to record both legs of a call when executing a Dequeue instruction
     * 
     * @param string $dequeueRecord Attribute to record both legs of a call when
     *                              executing a Dequeue instruction
     * @return $this Fluent Builder
     */
    public function setDequeueRecord($dequeueRecord) {
        $this->options['dequeueRecord'] = $dequeueRecord;
        return $this;
    }

    /**
     * Timeout for call when executing a Dequeue instruction
     * 
     * @param integer $dequeueTimeout Timeout for call when executing a Dequeue
     *                                instruction
     * @return $this Fluent Builder
     */
    public function setDequeueTimeout($dequeueTimeout) {
        $this->options['dequeueTimeout'] = $dequeueTimeout;
        return $this;
    }

    /**
     * Contact URI of the worker when executing a Dequeue instruction
     * 
     * @param string $dequeueTo Contact URI of the worker when executing a Dequeue
     *                          instruction
     * @return $this Fluent Builder
     */
    public function setDequeueTo($dequeueTo) {
        $this->options['dequeueTo'] = $dequeueTo;
        return $this;
    }

    /**
     * Callback URL for completed call event when executing a Dequeue instruction
     * 
     * @param string $dequeueStatusCallbackUrl Callback URL for completed call
     *                                         event when executing a Dequeue
     *                                         instruction
     * @return $this Fluent Builder
     */
    public function setDequeueStatusCallbackUrl($dequeueStatusCallbackUrl) {
        $this->options['dequeueStatusCallbackUrl'] = $dequeueStatusCallbackUrl;
        return $this;
    }

    /**
     * Caller ID for the outbound call when executing a Call instruction
     * 
     * @param string $callFrom Caller ID for the outbound call when executing a
     *                         Call instruction
     * @return $this Fluent Builder
     */
    public function setCallFrom($callFrom) {
        $this->options['callFrom'] = $callFrom;
        return $this;
    }

    /**
     * Attribute to record both legs of a call when executing a Call instruction
     * 
     * @param string $callRecord Attribute to record both legs of a call when
     *                           executing a Call instruction
     * @return $this Fluent Builder
     */
    public function setCallRecord($callRecord) {
        $this->options['callRecord'] = $callRecord;
        return $this;
    }

    /**
     * Timeout for call when executing a Call instruction
     * 
     * @param integer $callTimeout Timeout for call when executing a Call
     *                             instruction
     * @return $this Fluent Builder
     */
    public function setCallTimeout($callTimeout) {
        $this->options['callTimeout'] = $callTimeout;
        return $this;
    }

    /**
     * Contact URI of the worker when executing a Call instruction
     * 
     * @param string $callTo Contact URI of the worker when executing a Call
     *                       instruction
     * @return $this Fluent Builder
     */
    public function setCallTo($callTo) {
        $this->options['callTo'] = $callTo;
        return $this;
    }

    /**
     * TwiML URI executed on answering the worker's leg as a result of the Call instruction
     * 
     * @param string $callUrl TwiML URI executed on answering the worker's leg as a
     *                        result of the Call instruction
     * @return $this Fluent Builder
     */
    public function setCallUrl($callUrl) {
        $this->options['callUrl'] = $callUrl;
        return $this;
    }

    /**
     * Callback URL for completed call event when executing a Call instruction
     * 
     * @param string $callStatusCallbackUrl Callback URL for completed call event
     *                                      when executing a Call instruction
     * @return $this Fluent Builder
     */
    public function setCallStatusCallbackUrl($callStatusCallbackUrl) {
        $this->options['callStatusCallbackUrl'] = $callStatusCallbackUrl;
        return $this;
    }

    /**
     * Flag to determine if reservation should be accepted when executing a Call instruction
     * 
     * @param boolean $callAccept Flag to determine if reservation should be
     *                            accepted when executing a Call instruction
     * @return $this Fluent Builder
     */
    public function setCallAccept($callAccept) {
        $this->options['callAccept'] = $callAccept;
        return $this;
    }

    /**
     * Call sid of the call parked in the queue when executing a Redirect instruction
     * 
     * @param string $redirectCallSid Call sid of the call parked in the queue when
     *                                executing a Redirect instruction
     * @return $this Fluent Builder
     */
    public function setRedirectCallSid($redirectCallSid) {
        $this->options['redirectCallSid'] = $redirectCallSid;
        return $this;
    }

    /**
     * Flag to determine if reservation should be accepted when executing a Redirect instruction
     * 
     * @param boolean $redirectAccept Flag to determine if reservation should be
     *                                accepted when executing a Redirect instruction
     * @return $this Fluent Builder
     */
    public function setRedirectAccept($redirectAccept) {
        $this->options['redirectAccept'] = $redirectAccept;
        return $this;
    }

    /**
     * TwiML URI to redirect the call to when executing the Redirect instruction
     * 
     * @param string $redirectUrl TwiML URI to redirect the call to when executing
     *                            the Redirect instruction
     * @return $this Fluent Builder
     */
    public function setRedirectUrl($redirectUrl) {
        $this->options['redirectUrl'] = $redirectUrl;
        return $this;
    }

    /**
     * Contact URI of the worker when executing a Conference instruction
     * 
     * @param string $to Contact URI of the worker when executing a Conference
     *                   instruction
     * @return $this Fluent Builder
     */
    public function setTo($to) {
        $this->options['to'] = $to;
        return $this;
    }

    /**
     * Caller ID for the call to the worker when executing a Conference instruction
     * 
     * @param string $from Caller ID for the call to the worker when executing a
     *                     Conference instruction
     * @return $this Fluent Builder
     */
    public function setFrom($from) {
        $this->options['from'] = $from;
        return $this;
    }

    /**
     * The status_callback
     * 
     * @param string $statusCallback The status_callback
     * @return $this Fluent Builder
     */
    public function setStatusCallback($statusCallback) {
        $this->options['statusCallback'] = $statusCallback;
        return $this;
    }

    /**
     * The status_callback_method
     * 
     * @param string $statusCallbackMethod The status_callback_method
     * @return $this Fluent Builder
     */
    public function setStatusCallbackMethod($statusCallbackMethod) {
        $this->options['statusCallbackMethod'] = $statusCallbackMethod;
        return $this;
    }

    /**
     * The status_callback_event
     * 
     * @param string $statusCallbackEvent The status_callback_event
     * @return $this Fluent Builder
     */
    public function setStatusCallbackEvent($statusCallbackEvent) {
        $this->options['statusCallbackEvent'] = $statusCallbackEvent;
        return $this;
    }

    /**
     * Timeout for call when executing a Conference instruction
     * 
     * @param integer $timeout Timeout for call when executing a Conference
     *                         instruction
     * @return $this Fluent Builder
     */
    public function setTimeout($timeout) {
        $this->options['timeout'] = $timeout;
        return $this;
    }

    /**
     * The record
     * 
     * @param boolean $record The record
     * @return $this Fluent Builder
     */
    public function setRecord($record) {
        $this->options['record'] = $record;
        return $this;
    }

    /**
     * The muted
     * 
     * @param boolean $muted The muted
     * @return $this Fluent Builder
     */
    public function setMuted($muted) {
        $this->options['muted'] = $muted;
        return $this;
    }

    /**
     * The beep
     * 
     * @param string $beep The beep
     * @return $this Fluent Builder
     */
    public function setBeep($beep) {
        $this->options['beep'] = $beep;
        return $this;
    }

    /**
     * The start_conference_on_enter
     * 
     * @param boolean $startConferenceOnEnter The start_conference_on_enter
     * @return $this Fluent Builder
     */
    public function setStartConferenceOnEnter($startConferenceOnEnter) {
        $this->options['startConferenceOnEnter'] = $startConferenceOnEnter;
        return $this;
    }

    /**
     * The end_conference_on_exit
     * 
     * @param boolean $endConferenceOnExit The end_conference_on_exit
     * @return $this Fluent Builder
     */
    public function setEndConferenceOnExit($endConferenceOnExit) {
        $this->options['endConferenceOnExit'] = $endConferenceOnExit;
        return $this;
    }

    /**
     * The wait_url
     * 
     * @param string $waitUrl The wait_url
     * @return $this Fluent Builder
     */
    public function setWaitUrl($waitUrl) {
        $this->options['waitUrl'] = $waitUrl;
        return $this;
    }

    /**
     * The wait_method
     * 
     * @param string $waitMethod The wait_method
     * @return $this Fluent Builder
     */
    public function setWaitMethod($waitMethod) {
        $this->options['waitMethod'] = $waitMethod;
        return $this;
    }

    /**
     * The early_media
     * 
     * @param boolean $earlyMedia The early_media
     * @return $this Fluent Builder
     */
    public function setEarlyMedia($earlyMedia) {
        $this->options['earlyMedia'] = $earlyMedia;
        return $this;
    }

    /**
     * The max_participants
     * 
     * @param integer $maxParticipants The max_participants
     * @return $this Fluent Builder
     */
    public function setMaxParticipants($maxParticipants) {
        $this->options['maxParticipants'] = $maxParticipants;
        return $this;
    }

    /**
     * The conference_status_callback
     * 
     * @param string $conferenceStatusCallback The conference_status_callback
     * @return $this Fluent Builder
     */
    public function setConferenceStatusCallback($conferenceStatusCallback) {
        $this->options['conferenceStatusCallback'] = $conferenceStatusCallback;
        return $this;
    }

    /**
     * The conference_status_callback_method
     * 
     * @param string $conferenceStatusCallbackMethod The
     *                                               conference_status_callback_method
     * @return $this Fluent Builder
     */
    public function setConferenceStatusCallbackMethod($conferenceStatusCallbackMethod) {
        $this->options['conferenceStatusCallbackMethod'] = $conferenceStatusCallbackMethod;
        return $this;
    }

    /**
     * The conference_status_callback_event
     * 
     * @param string $conferenceStatusCallbackEvent The
     *                                              conference_status_callback_event
     * @return $this Fluent Builder
     */
    public function setConferenceStatusCallbackEvent($conferenceStatusCallbackEvent) {
        $this->options['conferenceStatusCallbackEvent'] = $conferenceStatusCallbackEvent;
        return $this;
    }

    /**
     * The conference_record
     * 
     * @param string $conferenceRecord The conference_record
     * @return $this Fluent Builder
     */
    public function setConferenceRecord($conferenceRecord) {
        $this->options['conferenceRecord'] = $conferenceRecord;
        return $this;
    }

    /**
     * The conference_trim
     * 
     * @param string $conferenceTrim The conference_trim
     * @return $this Fluent Builder
     */
    public function setConferenceTrim($conferenceTrim) {
        $this->options['conferenceTrim'] = $conferenceTrim;
        return $this;
    }

    /**
     * The recording_channels
     * 
     * @param string $recordingChannels The recording_channels
     * @return $this Fluent Builder
     */
    public function setRecordingChannels($recordingChannels) {
        $this->options['recordingChannels'] = $recordingChannels;
        return $this;
    }

    /**
     * The recording_status_callback
     * 
     * @param string $recordingStatusCallback The recording_status_callback
     * @return $this Fluent Builder
     */
    public function setRecordingStatusCallback($recordingStatusCallback) {
        $this->options['recordingStatusCallback'] = $recordingStatusCallback;
        return $this;
    }

    /**
     * The recording_status_callback_method
     * 
     * @param string $recordingStatusCallbackMethod The
     *                                              recording_status_callback_method
     * @return $this Fluent Builder
     */
    public function setRecordingStatusCallbackMethod($recordingStatusCallbackMethod) {
        $this->options['recordingStatusCallbackMethod'] = $recordingStatusCallbackMethod;
        return $this;
    }

    /**
     * The conference_recording_status_callback
     * 
     * @param string $conferenceRecordingStatusCallback The
     *                                                  conference_recording_status_callback
     * @return $this Fluent Builder
     */
    public function setConferenceRecordingStatusCallback($conferenceRecordingStatusCallback) {
        $this->options['conferenceRecordingStatusCallback'] = $conferenceRecordingStatusCallback;
        return $this;
    }

    /**
     * The conference_recording_status_callback_method
     * 
     * @param string $conferenceRecordingStatusCallbackMethod The
     *                                                        conference_recording_status_callback_method
     * @return $this Fluent Builder
     */
    public function setConferenceRecordingStatusCallbackMethod($conferenceRecordingStatusCallbackMethod) {
        $this->options['conferenceRecordingStatusCallbackMethod'] = $conferenceRecordingStatusCallbackMethod;
        return $this;
    }

    /**
     * The region
     * 
     * @param string $region The region
     * @return $this Fluent Builder
     */
    public function setRegion($region) {
        $this->options['region'] = $region;
        return $this;
    }

    /**
     * The sip_auth_username
     * 
     * @param string $sipAuthUsername The sip_auth_username
     * @return $this Fluent Builder
     */
    public function setSipAuthUsername($sipAuthUsername) {
        $this->options['sipAuthUsername'] = $sipAuthUsername;
        return $this;
    }

    /**
     * The sip_auth_password
     * 
     * @param string $sipAuthPassword The sip_auth_password
     * @return $this Fluent Builder
     */
    public function setSipAuthPassword($sipAuthPassword) {
        $this->options['sipAuthPassword'] = $sipAuthPassword;
        return $this;
    }

    /**
     * Call progress events sent via webhooks as a result of a Dequeue instruction
     * 
     * @param string $dequeueStatusCallbackEvent Call progress events sent via
     *                                           webhooks as a result of a Dequeue
     *                                           instruction
     * @return $this Fluent Builder
     */
    public function setDequeueStatusCallbackEvent($dequeueStatusCallbackEvent) {
        $this->options['dequeueStatusCallbackEvent'] = $dequeueStatusCallbackEvent;
        return $this;
    }

    /**
     * New worker activity sid after executing a Conference instruction
     * 
     * @param string $postWorkActivitySid New worker activity sid after executing a
     *                                    Conference instruction
     * @return $this Fluent Builder
     */
    public function setPostWorkActivitySid($postWorkActivitySid) {
        $this->options['postWorkActivitySid'] = $postWorkActivitySid;
        return $this;
    }

    /**
     * Supervisor mode when executing the Supervise instruction
     * 
     * @param string $supervisorMode Supervisor mode when executing the Supervise
     *                               instruction
     * @return $this Fluent Builder
     */
    public function setSupervisorMode($supervisorMode) {
        $this->options['supervisorMode'] = $supervisorMode;
        return $this;
    }

    /**
     * Supervisor sid/uri when executing the Supervise instruction
     * 
     * @param string $supervisor Supervisor sid/uri when executing the Supervise
     *                           instruction
     * @return $this Fluent Builder
     */
    public function setSupervisor($supervisor) {
        $this->options['supervisor'] = $supervisor;
        return $this;
    }

    /**
     * The end_conference_on_customer_exit
     * 
     * @param boolean $endConferenceOnCustomerExit The
     *                                             end_conference_on_customer_exit
     * @return $this Fluent Builder
     */
    public function setEndConferenceOnCustomerExit($endConferenceOnCustomerExit) {
        $this->options['endConferenceOnCustomerExit'] = $endConferenceOnCustomerExit;
        return $this;
    }

    /**
     * The beep_on_customer_entrance
     * 
     * @param boolean $beepOnCustomerEntrance The beep_on_customer_entrance
     * @return $this Fluent Builder
     */
    public function setBeepOnCustomerEntrance($beepOnCustomerEntrance) {
        $this->options['beepOnCustomerEntrance'] = $beepOnCustomerEntrance;
        return $this;
    }

    /**
     * Provide a friendly representation
     * 
     * @return string Machine friendly representation
     */
    public function __toString() {
        $options = array();
        foreach ($this->options as $key => $value) {
            if ($value != Values::NONE) {
                $options[] = "$key=$value";
            }
        }
        return '[Twilio.Taskrouter.V1.UpdateReservationOptions ' . implode(' ', $options) . ']';
    }
}