<?php
/**
 * ReportingV3RetrievalDetailsGet200ResponseRetrievalDetails
 *
 * PHP version 5
 *
 * @category Class
 * @package  CyberSource
 * @author   Swaagger Codegen team
 * @link     https://github.com/swagger-api/swagger-codegen
 */

/**
 * CyberSource Merged Spec
 *
 * All CyberSource API specs merged together. These are available at https://developer.cybersource.com/api/reference/api-reference.html
 *
 * OpenAPI spec version: 0.0.1
 * 
 * Generated by: https://github.com/swagger-api/swagger-codegen.git
 *
 */
/**
 * 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 CyberSource\Model;

use \ArrayAccess;

/**
 * ReportingV3RetrievalDetailsGet200ResponseRetrievalDetails Class Doc Comment
 *
 * @category    Class
 * @package     CyberSource
 * @author      Swagger Codegen team
 * @link        https://github.com/swagger-api/swagger-codegen
 */
class ReportingV3RetrievalDetailsGet200ResponseRetrievalDetails implements ArrayAccess
{
    const DISCRIMINATOR = null;

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

    /**
      * Array of property to type mappings. Used for (de)serialization
      * @var string[]
      */
    protected static $swaggerTypes = [
        'processorMerchantId' => 'string',
        'merchantName' => 'string',
        'transactionReferenceNumber' => 'string',
        'merchantReferenceNumber' => 'string',
        'natureOfDispute' => 'string',
        'alertType' => 'string',
        'amount' => 'string',
        'sign' => 'string',
        'action' => 'string',
        'cardType' => 'string',
        'originalSettlementTime' => '\DateTime',
        'trackingNumber' => 'string',
        'currencyCode' => 'string',
        'requestId' => 'string',
        'responseDueTime' => '\DateTime',
        'time' => '\DateTime',
        'actionDescription' => 'string',
        'customerId' => 'string',
        'reasonCode' => 'string',
        'representmentCPTime' => '\DateTime',
        'applications' => 'string',
        'eventRequestedTime' => '\DateTime'
    ];

    /**
      * Array of property to format mappings. Used for (de)serialization
      * @var string[]
      */
    protected static $swaggerFormats = [
        'processorMerchantId' => null,
        'merchantName' => null,
        'transactionReferenceNumber' => null,
        'merchantReferenceNumber' => null,
        'natureOfDispute' => null,
        'alertType' => null,
        'amount' => null,
        'sign' => null,
        'action' => null,
        'cardType' => null,
        'originalSettlementTime' => 'date-time',
        'trackingNumber' => null,
        'currencyCode' => null,
        'requestId' => null,
        'responseDueTime' => 'date-time',
        'time' => 'date-time',
        'actionDescription' => null,
        'customerId' => null,
        'reasonCode' => null,
        'representmentCPTime' => 'date-time',
        'applications' => null,
        'eventRequestedTime' => 'date-time'
    ];

    public static function swaggerTypes()
    {
        return self::$swaggerTypes;
    }

    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 = [
        'processorMerchantId' => 'processorMerchantId',
        'merchantName' => 'merchantName',
        'transactionReferenceNumber' => 'transactionReferenceNumber',
        'merchantReferenceNumber' => 'merchantReferenceNumber',
        'natureOfDispute' => 'natureOfDispute',
        'alertType' => 'alertType',
        'amount' => 'amount',
        'sign' => 'sign',
        'action' => 'action',
        'cardType' => 'cardType',
        'originalSettlementTime' => 'originalSettlementTime',
        'trackingNumber' => 'trackingNumber',
        'currencyCode' => 'currencyCode',
        'requestId' => 'requestId',
        'responseDueTime' => 'responseDueTime',
        'time' => 'time',
        'actionDescription' => 'actionDescription',
        'customerId' => 'customerId',
        'reasonCode' => 'reasonCode',
        'representmentCPTime' => 'representmentCPTime',
        'applications' => 'applications',
        'eventRequestedTime' => 'eventRequestedTime'
    ];


    /**
     * Array of attributes to setter functions (for deserialization of responses)
     * @var string[]
     */
    protected static $setters = [
        'processorMerchantId' => 'setProcessorMerchantId',
        'merchantName' => 'setMerchantName',
        'transactionReferenceNumber' => 'setTransactionReferenceNumber',
        'merchantReferenceNumber' => 'setMerchantReferenceNumber',
        'natureOfDispute' => 'setNatureOfDispute',
        'alertType' => 'setAlertType',
        'amount' => 'setAmount',
        'sign' => 'setSign',
        'action' => 'setAction',
        'cardType' => 'setCardType',
        'originalSettlementTime' => 'setOriginalSettlementTime',
        'trackingNumber' => 'setTrackingNumber',
        'currencyCode' => 'setCurrencyCode',
        'requestId' => 'setRequestId',
        'responseDueTime' => 'setResponseDueTime',
        'time' => 'setTime',
        'actionDescription' => 'setActionDescription',
        'customerId' => 'setCustomerId',
        'reasonCode' => 'setReasonCode',
        'representmentCPTime' => 'setRepresentmentCPTime',
        'applications' => 'setApplications',
        'eventRequestedTime' => 'setEventRequestedTime'
    ];


    /**
     * Array of attributes to getter functions (for serialization of requests)
     * @var string[]
     */
    protected static $getters = [
        'processorMerchantId' => 'getProcessorMerchantId',
        'merchantName' => 'getMerchantName',
        'transactionReferenceNumber' => 'getTransactionReferenceNumber',
        'merchantReferenceNumber' => 'getMerchantReferenceNumber',
        'natureOfDispute' => 'getNatureOfDispute',
        'alertType' => 'getAlertType',
        'amount' => 'getAmount',
        'sign' => 'getSign',
        'action' => 'getAction',
        'cardType' => 'getCardType',
        'originalSettlementTime' => 'getOriginalSettlementTime',
        'trackingNumber' => 'getTrackingNumber',
        'currencyCode' => 'getCurrencyCode',
        'requestId' => 'getRequestId',
        'responseDueTime' => 'getResponseDueTime',
        'time' => 'getTime',
        'actionDescription' => 'getActionDescription',
        'customerId' => 'getCustomerId',
        'reasonCode' => 'getReasonCode',
        'representmentCPTime' => 'getRepresentmentCPTime',
        'applications' => 'getApplications',
        'eventRequestedTime' => 'getEventRequestedTime'
    ];

    public static function attributeMap()
    {
        return self::$attributeMap;
    }

    public static function setters()
    {
        return self::$setters;
    }

    public static function getters()
    {
        return self::$getters;
    }

    

    

    /**
     * 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['processorMerchantId'] = isset($data['processorMerchantId']) ? $data['processorMerchantId'] : null;
        $this->container['merchantName'] = isset($data['merchantName']) ? $data['merchantName'] : null;
        $this->container['transactionReferenceNumber'] = isset($data['transactionReferenceNumber']) ? $data['transactionReferenceNumber'] : null;
        $this->container['merchantReferenceNumber'] = isset($data['merchantReferenceNumber']) ? $data['merchantReferenceNumber'] : null;
        $this->container['natureOfDispute'] = isset($data['natureOfDispute']) ? $data['natureOfDispute'] : null;
        $this->container['alertType'] = isset($data['alertType']) ? $data['alertType'] : null;
        $this->container['amount'] = isset($data['amount']) ? $data['amount'] : null;
        $this->container['sign'] = isset($data['sign']) ? $data['sign'] : null;
        $this->container['action'] = isset($data['action']) ? $data['action'] : null;
        $this->container['cardType'] = isset($data['cardType']) ? $data['cardType'] : null;
        $this->container['originalSettlementTime'] = isset($data['originalSettlementTime']) ? $data['originalSettlementTime'] : null;
        $this->container['trackingNumber'] = isset($data['trackingNumber']) ? $data['trackingNumber'] : null;
        $this->container['currencyCode'] = isset($data['currencyCode']) ? $data['currencyCode'] : null;
        $this->container['requestId'] = isset($data['requestId']) ? $data['requestId'] : null;
        $this->container['responseDueTime'] = isset($data['responseDueTime']) ? $data['responseDueTime'] : null;
        $this->container['time'] = isset($data['time']) ? $data['time'] : null;
        $this->container['actionDescription'] = isset($data['actionDescription']) ? $data['actionDescription'] : null;
        $this->container['customerId'] = isset($data['customerId']) ? $data['customerId'] : null;
        $this->container['reasonCode'] = isset($data['reasonCode']) ? $data['reasonCode'] : null;
        $this->container['representmentCPTime'] = isset($data['representmentCPTime']) ? $data['representmentCPTime'] : null;
        $this->container['applications'] = isset($data['applications']) ? $data['applications'] : null;
        $this->container['eventRequestedTime'] = isset($data['eventRequestedTime']) ? $data['eventRequestedTime'] : null;
    }

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

        return $invalid_properties;
    }

    /**
     * validate all the properties in the model
     * return true if all passed
     *
     * @return bool True if all properties are valid
     */
    public function valid()
    {

        return true;
    }


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

    /**
     * Sets processorMerchantId
     * @param string $processorMerchantId Processor Merchant Id
     * @return $this
     */
    public function setProcessorMerchantId($processorMerchantId)
    {
        $this->container['processorMerchantId'] = $processorMerchantId;

        return $this;
    }

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

    /**
     * Sets merchantName
     * @param string $merchantName Merchant Name
     * @return $this
     */
    public function setMerchantName($merchantName)
    {
        $this->container['merchantName'] = $merchantName;

        return $this;
    }

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

    /**
     * Sets transactionReferenceNumber
     * @param string $transactionReferenceNumber Transaction Reference Number
     * @return $this
     */
    public function setTransactionReferenceNumber($transactionReferenceNumber)
    {
        $this->container['transactionReferenceNumber'] = $transactionReferenceNumber;

        return $this;
    }

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

    /**
     * Sets merchantReferenceNumber
     * @param string $merchantReferenceNumber Merchant Reference Number
     * @return $this
     */
    public function setMerchantReferenceNumber($merchantReferenceNumber)
    {
        $this->container['merchantReferenceNumber'] = $merchantReferenceNumber;

        return $this;
    }

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

    /**
     * Sets natureOfDispute
     * @param string $natureOfDispute Nature of Dispute
     * @return $this
     */
    public function setNatureOfDispute($natureOfDispute)
    {
        $this->container['natureOfDispute'] = $natureOfDispute;

        return $this;
    }

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

    /**
     * Sets alertType
     * @param string $alertType Retrieval Alert Type
     * @return $this
     */
    public function setAlertType($alertType)
    {
        $this->container['alertType'] = $alertType;

        return $this;
    }

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

    /**
     * Sets amount
     * @param string $amount Retrieval Amount
     * @return $this
     */
    public function setAmount($amount)
    {
        $this->container['amount'] = $amount;

        return $this;
    }

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

    /**
     * Sets sign
     * @param string $sign Retrieval Sign
     * @return $this
     */
    public function setSign($sign)
    {
        $this->container['sign'] = $sign;

        return $this;
    }

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

    /**
     * Sets action
     * @param string $action Retrieval Action
     * @return $this
     */
    public function setAction($action)
    {
        $this->container['action'] = $action;

        return $this;
    }

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

    /**
     * Sets cardType
     * @param string $cardType Card Type
     * @return $this
     */
    public function setCardType($cardType)
    {
        $this->container['cardType'] = $cardType;

        return $this;
    }

    /**
     * Gets originalSettlementTime
     * @return \DateTime
     */
    public function getOriginalSettlementTime()
    {
        return $this->container['originalSettlementTime'];
    }

    /**
     * Sets originalSettlementTime
     * @param \DateTime $originalSettlementTime Original Settlement Date
     * @return $this
     */
    public function setOriginalSettlementTime($originalSettlementTime)
    {
        $this->container['originalSettlementTime'] = $originalSettlementTime;

        return $this;
    }

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

    /**
     * Sets trackingNumber
     * @param string $trackingNumber Tracking Number
     * @return $this
     */
    public function setTrackingNumber($trackingNumber)
    {
        $this->container['trackingNumber'] = $trackingNumber;

        return $this;
    }

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

    /**
     * Sets currencyCode
     * @param string $currencyCode Valid ISO 4217 ALPHA-3 currency code
     * @return $this
     */
    public function setCurrencyCode($currencyCode)
    {
        $this->container['currencyCode'] = $currencyCode;

        return $this;
    }

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

    /**
     * Sets requestId
     * @param string $requestId Request Id
     * @return $this
     */
    public function setRequestId($requestId)
    {
        $this->container['requestId'] = $requestId;

        return $this;
    }

    /**
     * Gets responseDueTime
     * @return \DateTime
     */
    public function getResponseDueTime()
    {
        return $this->container['responseDueTime'];
    }

    /**
     * Sets responseDueTime
     * @param \DateTime $responseDueTime Response Due Date
     * @return $this
     */
    public function setResponseDueTime($responseDueTime)
    {
        $this->container['responseDueTime'] = $responseDueTime;

        return $this;
    }

    /**
     * Gets time
     * @return \DateTime
     */
    public function getTime()
    {
        return $this->container['time'];
    }

    /**
     * Sets time
     * @param \DateTime $time Retrieval Date
     * @return $this
     */
    public function setTime($time)
    {
        $this->container['time'] = $time;

        return $this;
    }

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

    /**
     * Sets actionDescription
     * @param string $actionDescription Retrieval Action Description
     * @return $this
     */
    public function setActionDescription($actionDescription)
    {
        $this->container['actionDescription'] = $actionDescription;

        return $this;
    }

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

    /**
     * Sets customerId
     * @param string $customerId Customer Id
     * @return $this
     */
    public function setCustomerId($customerId)
    {
        $this->container['customerId'] = $customerId;

        return $this;
    }

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

    /**
     * Sets reasonCode
     * @param string $reasonCode Retrieval Reason Code
     * @return $this
     */
    public function setReasonCode($reasonCode)
    {
        $this->container['reasonCode'] = $reasonCode;

        return $this;
    }

    /**
     * Gets representmentCPTime
     * @return \DateTime
     */
    public function getRepresentmentCPTime()
    {
        return $this->container['representmentCPTime'];
    }

    /**
     * Sets representmentCPTime
     * @param \DateTime $representmentCPTime Representment CP Date
     * @return $this
     */
    public function setRepresentmentCPTime($representmentCPTime)
    {
        $this->container['representmentCPTime'] = $representmentCPTime;

        return $this;
    }

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

    /**
     * Sets applications
     * @param string $applications ICS Request Applications
     * @return $this
     */
    public function setApplications($applications)
    {
        $this->container['applications'] = $applications;

        return $this;
    }

    /**
     * Gets eventRequestedTime
     * @return \DateTime
     */
    public function getEventRequestedTime()
    {
        return $this->container['eventRequestedTime'];
    }

    /**
     * Sets eventRequestedTime
     * @param \DateTime $eventRequestedTime Event Request Date
     * @return $this
     */
    public function setEventRequestedTime($eventRequestedTime)
    {
        $this->container['eventRequestedTime'] = $eventRequestedTime;

        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(\CyberSource\ObjectSerializer::sanitizeForSerialization($this), JSON_PRETTY_PRINT);
        }

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


