<?php
/**
 * BulkSendEnvelopesInfo
 *
 * PHP version 7.4
 *
 * @category Class
 * @package  DocuSign\eSign
 * @author   Swagger Codegen team <apihelp@docusign.com>
 * @license  The Docusign PHP Client SDK is licensed under the MIT License.
 * @link     https://github.com/swagger-api/swagger-codegen
 */

/**
 * Docusign eSignature REST API
 *
 * The Docusign eSignature REST API provides you with a powerful, convenient, and simple Web services API for interacting with Docusign.
 *
 * OpenAPI spec version: v2.1
 * Contact: devcenter@docusign.com
 * Generated by: https://github.com/swagger-api/swagger-codegen.git
 * Swagger Codegen version: 2.4.21
 */

/**
 * NOTE: This class is auto generated by the swagger code generator program.
 * https://github.com/swagger-api/swagger-codegen
 * Do not edit the class manually.
 */

namespace DocuSign\eSign\Model;

use \ArrayAccess;
use DocuSign\eSign\ObjectSerializer;

/**
 * BulkSendEnvelopesInfo Class Doc Comment
 *
 * @category    Class
 * @package     DocuSign\eSign
 * @author      Swagger Codegen team <apihelp@docusign.com>
 * @license     The Docusign PHP Client SDK is licensed under the MIT License.
 * @link        https://github.com/swagger-api/swagger-codegen
 */
class BulkSendEnvelopesInfo implements ModelInterface, ArrayAccess
{
    const DISCRIMINATOR = null;

    /**
      * The original name of the model.
      *
      * @var string
      */
    protected static $swaggerModelName = 'bulkSendEnvelopesInfo';

    /**
      * Array of property to type mappings. Used for (de)serialization
      *
      * @var string[]
      */
    protected static $swaggerTypes = [
        'authoritative_copy' => '?string',
        'completed' => '?string',
        'correct' => '?string',
        'created' => '?string',
        'declined' => '?string',
        'deleted' => '?string',
        'delivered' => '?string',
        'digital_signatures_pending' => '?string',
        'sent' => '?string',
        'signed' => '?string',
        'timed_out' => '?string',
        'transfer_completed' => '?string',
        'voided' => '?string'
    ];

    /**
      * Array of property to format mappings. Used for (de)serialization
      *
      * @var string[]
      */
    protected static $swaggerFormats = [
        'authoritative_copy' => null,
        'completed' => null,
        'correct' => null,
        'created' => null,
        'declined' => null,
        'deleted' => null,
        'delivered' => null,
        'digital_signatures_pending' => null,
        'sent' => null,
        'signed' => null,
        'timed_out' => null,
        'transfer_completed' => null,
        'voided' => null
    ];

    /**
     * Array of property to type mappings. Used for (de)serialization
     *
     * @return array
     */
    public static function swaggerTypes()
    {
        return self::$swaggerTypes;
    }

    /**
     * Array of property to format mappings. Used for (de)serialization
     *
     * @return array
     */
    public static function swaggerFormats()
    {
        return self::$swaggerFormats;
    }

    /**
     * Array of attributes where the key is the local name,
     * and the value is the original name
     *
     * @var string[]
     */
    protected static $attributeMap = [
        'authoritative_copy' => 'authoritativeCopy',
        'completed' => 'completed',
        'correct' => 'correct',
        'created' => 'created',
        'declined' => 'declined',
        'deleted' => 'deleted',
        'delivered' => 'delivered',
        'digital_signatures_pending' => 'digitalSignaturesPending',
        'sent' => 'sent',
        'signed' => 'signed',
        'timed_out' => 'timedOut',
        'transfer_completed' => 'transferCompleted',
        'voided' => 'voided'
    ];

    /**
     * Array of attributes to setter functions (for deserialization of responses)
     *
     * @var string[]
     */
    protected static $setters = [
        'authoritative_copy' => 'setAuthoritativeCopy',
        'completed' => 'setCompleted',
        'correct' => 'setCorrect',
        'created' => 'setCreated',
        'declined' => 'setDeclined',
        'deleted' => 'setDeleted',
        'delivered' => 'setDelivered',
        'digital_signatures_pending' => 'setDigitalSignaturesPending',
        'sent' => 'setSent',
        'signed' => 'setSigned',
        'timed_out' => 'setTimedOut',
        'transfer_completed' => 'setTransferCompleted',
        'voided' => 'setVoided'
    ];

    /**
     * Array of attributes to getter functions (for serialization of requests)
     *
     * @var string[]
     */
    protected static $getters = [
        'authoritative_copy' => 'getAuthoritativeCopy',
        'completed' => 'getCompleted',
        'correct' => 'getCorrect',
        'created' => 'getCreated',
        'declined' => 'getDeclined',
        'deleted' => 'getDeleted',
        'delivered' => 'getDelivered',
        'digital_signatures_pending' => 'getDigitalSignaturesPending',
        'sent' => 'getSent',
        'signed' => 'getSigned',
        'timed_out' => 'getTimedOut',
        'transfer_completed' => 'getTransferCompleted',
        'voided' => 'getVoided'
    ];

    /**
     * Array of attributes where the key is the local name,
     * and the value is the original name
     *
     * @return array
     */
    public static function attributeMap()
    {
        return self::$attributeMap;
    }

    /**
     * Array of attributes to setter functions (for deserialization of responses)
     *
     * @return array
     */
    public static function setters()
    {
        return self::$setters;
    }

    /**
     * Array of attributes to getter functions (for serialization of requests)
     *
     * @return array
     */
    public static function getters()
    {
        return self::$getters;
    }

    /**
     * The original name of the model.
     *
     * @return string
     */
    public function getModelName()
    {
        return self::$swaggerModelName;
    }

    

    

    /**
     * Associative array for storing property values
     *
     * @var mixed[]
     */
    protected $container = [];

    /**
     * Constructor
     *
     * @param mixed[] $data Associated array of property values
     *                      initializing the model
     */
    public function __construct(?array $data = null)
    {
        $this->container['authoritative_copy'] = isset($data['authoritative_copy']) ? $data['authoritative_copy'] : null;
        $this->container['completed'] = isset($data['completed']) ? $data['completed'] : null;
        $this->container['correct'] = isset($data['correct']) ? $data['correct'] : null;
        $this->container['created'] = isset($data['created']) ? $data['created'] : null;
        $this->container['declined'] = isset($data['declined']) ? $data['declined'] : null;
        $this->container['deleted'] = isset($data['deleted']) ? $data['deleted'] : null;
        $this->container['delivered'] = isset($data['delivered']) ? $data['delivered'] : null;
        $this->container['digital_signatures_pending'] = isset($data['digital_signatures_pending']) ? $data['digital_signatures_pending'] : null;
        $this->container['sent'] = isset($data['sent']) ? $data['sent'] : null;
        $this->container['signed'] = isset($data['signed']) ? $data['signed'] : null;
        $this->container['timed_out'] = isset($data['timed_out']) ? $data['timed_out'] : null;
        $this->container['transfer_completed'] = isset($data['transfer_completed']) ? $data['transfer_completed'] : null;
        $this->container['voided'] = isset($data['voided']) ? $data['voided'] : null;
    }

    /**
     * Show all the invalid properties with reasons.
     *
     * @return array invalid properties with reasons
     */
    public function listInvalidProperties()
    {
        $invalidProperties = [];

        return $invalidProperties;
    }

    /**
     * Validate all the properties in the model
     * return true if all passed
     *
     * @return bool True if all properties are valid
     */
    public function valid()
    {
        return count($this->listInvalidProperties()) === 0;
    }


    /**
     * Gets authoritative_copy
     *
     * @return ?string
     */
    public function getAuthoritativeCopy()
    {
        return $this->container['authoritative_copy'];
    }

    /**
     * Sets authoritative_copy
     *
     * @param ?string $authoritative_copy Specifies the Authoritative copy feature. If set to true the Authoritative copy feature is enabled.
     *
     * @return $this
     */
    public function setAuthoritativeCopy($authoritative_copy)
    {
        $this->container['authoritative_copy'] = $authoritative_copy;

        return $this;
    }

    /**
     * Gets completed
     *
     * @return ?string
     */
    public function getCompleted()
    {
        return $this->container['completed'];
    }

    /**
     * Sets completed
     *
     * @param ?string $completed 
     *
     * @return $this
     */
    public function setCompleted($completed)
    {
        $this->container['completed'] = $completed;

        return $this;
    }

    /**
     * Gets correct
     *
     * @return ?string
     */
    public function getCorrect()
    {
        return $this->container['correct'];
    }

    /**
     * Sets correct
     *
     * @param ?string $correct 
     *
     * @return $this
     */
    public function setCorrect($correct)
    {
        $this->container['correct'] = $correct;

        return $this;
    }

    /**
     * Gets created
     *
     * @return ?string
     */
    public function getCreated()
    {
        return $this->container['created'];
    }

    /**
     * Sets created
     *
     * @param ?string $created 
     *
     * @return $this
     */
    public function setCreated($created)
    {
        $this->container['created'] = $created;

        return $this;
    }

    /**
     * Gets declined
     *
     * @return ?string
     */
    public function getDeclined()
    {
        return $this->container['declined'];
    }

    /**
     * Sets declined
     *
     * @param ?string $declined 
     *
     * @return $this
     */
    public function setDeclined($declined)
    {
        $this->container['declined'] = $declined;

        return $this;
    }

    /**
     * Gets deleted
     *
     * @return ?string
     */
    public function getDeleted()
    {
        return $this->container['deleted'];
    }

    /**
     * Sets deleted
     *
     * @param ?string $deleted 
     *
     * @return $this
     */
    public function setDeleted($deleted)
    {
        $this->container['deleted'] = $deleted;

        return $this;
    }

    /**
     * Gets delivered
     *
     * @return ?string
     */
    public function getDelivered()
    {
        return $this->container['delivered'];
    }

    /**
     * Sets delivered
     *
     * @param ?string $delivered 
     *
     * @return $this
     */
    public function setDelivered($delivered)
    {
        $this->container['delivered'] = $delivered;

        return $this;
    }

    /**
     * Gets digital_signatures_pending
     *
     * @return ?string
     */
    public function getDigitalSignaturesPending()
    {
        return $this->container['digital_signatures_pending'];
    }

    /**
     * Sets digital_signatures_pending
     *
     * @param ?string $digital_signatures_pending 
     *
     * @return $this
     */
    public function setDigitalSignaturesPending($digital_signatures_pending)
    {
        $this->container['digital_signatures_pending'] = $digital_signatures_pending;

        return $this;
    }

    /**
     * Gets sent
     *
     * @return ?string
     */
    public function getSent()
    {
        return $this->container['sent'];
    }

    /**
     * Sets sent
     *
     * @param ?string $sent 
     *
     * @return $this
     */
    public function setSent($sent)
    {
        $this->container['sent'] = $sent;

        return $this;
    }

    /**
     * Gets signed
     *
     * @return ?string
     */
    public function getSigned()
    {
        return $this->container['signed'];
    }

    /**
     * Sets signed
     *
     * @param ?string $signed 
     *
     * @return $this
     */
    public function setSigned($signed)
    {
        $this->container['signed'] = $signed;

        return $this;
    }

    /**
     * Gets timed_out
     *
     * @return ?string
     */
    public function getTimedOut()
    {
        return $this->container['timed_out'];
    }

    /**
     * Sets timed_out
     *
     * @param ?string $timed_out 
     *
     * @return $this
     */
    public function setTimedOut($timed_out)
    {
        $this->container['timed_out'] = $timed_out;

        return $this;
    }

    /**
     * Gets transfer_completed
     *
     * @return ?string
     */
    public function getTransferCompleted()
    {
        return $this->container['transfer_completed'];
    }

    /**
     * Sets transfer_completed
     *
     * @param ?string $transfer_completed 
     *
     * @return $this
     */
    public function setTransferCompleted($transfer_completed)
    {
        $this->container['transfer_completed'] = $transfer_completed;

        return $this;
    }

    /**
     * Gets voided
     *
     * @return ?string
     */
    public function getVoided()
    {
        return $this->container['voided'];
    }

    /**
     * Sets voided
     *
     * @param ?string $voided 
     *
     * @return $this
     */
    public function setVoided($voided)
    {
        $this->container['voided'] = $voided;

        return $this;
    }
    /**
     * Returns true if offset exists. False otherwise.
     *
     * @param integer $offset Offset
     *
     * @return boolean
     */
    #[\ReturnTypeWillChange]
    public function offsetExists($offset)
    {
        return isset($this->container[$offset]);
    }

    /**
     * Gets offset.
     *
     * @param integer $offset Offset
     *
     * @return mixed
     */
    #[\ReturnTypeWillChange]
    public function offsetGet($offset)
    {
        return isset($this->container[$offset]) ? $this->container[$offset] : null;
    }

    /**
     * Sets value based on offset.
     *
     * @param integer $offset Offset
     * @param mixed   $value  Value to be set
     *
     * @return void
     */
    #[\ReturnTypeWillChange]
    public function offsetSet($offset, $value)
    {
        if (is_null($offset)) {
            $this->container[] = $value;
        } else {
            $this->container[$offset] = $value;
        }
    }

    /**
     * Unsets offset.
     *
     * @param integer $offset Offset
     *
     * @return void
     */
    #[\ReturnTypeWillChange]
    public function offsetUnset($offset)
    {
        unset($this->container[$offset]);
    }

    /**
     * Gets the string presentation of the object
     *
     * @return string
     */
    public function __toString()
    {
        if (defined('JSON_PRETTY_PRINT')) { // use JSON pretty print
            return json_encode(
                ObjectSerializer::sanitizeForSerialization($this),
                JSON_PRETTY_PRINT
            );
        }

        return json_encode(ObjectSerializer::sanitizeForSerialization($this));
    }
}

