<?php
/**
 * InstallPosWithProductInstallPosWithProductParamParam
 *
 * PHP version 5
 *
 * @category Class
 * @package  Yeepay\Yop\Sdk\
 * @author   Swagger Codegen team
 * @link     https://github.com/swagger-api/swagger-codegen
 */

/**
 * pos
 *
 * <p>pos对外接口</p>
 *
 * OpenAPI spec version: 1.0
 * 
 * Generated by: https://github.com/swagger-api/swagger-codegen.git
 * Swagger Codegen version: 3.0.13
 */

/**
 * 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 Yeepay\Yop\Sdk\Service\Pos\Model;

use \ArrayAccess;
use Yeepay\Yop\Sdk\Model\ModelInterface;
use Yeepay\Yop\Sdk\Utils\ObjectSerializer;

/**
 * InstallPosWithProductInstallPosWithProductParamParam Class Doc Comment
 *
 * @category Class
 * @description 方法签名第0个参数，请自行修改arg0等参数的名字
 * @package  Yeepay\Yop\Sdk\
 * @author   Swagger Codegen team
 * @link     https://github.com/swagger-api/swagger-codegen
 */
class InstallPosWithProductInstallPosWithProductParamParam implements ModelInterface, ArrayAccess
{
    const DISCRIMINATOR = null;

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

    /**
      * Array of property to type mappings. Used for (de)serialization
      *
      * @var string[]
      */
    protected static $swaggerTypes = [
        'customerNumber' => 'string',
        'agentCode' => 'string',
        'productCode' => 'string',
        'externalMcc' => 'string',
        'customerType' => 'string',
        'shopList' => '\Yeepay\Yop\Sdk\Service\Pos\Model\InstallPosWithProductPreShopParam[]',
        'posList' => '\Yeepay\Yop\Sdk\Service\Pos\Model\InstallPosWithProductPrePosParam[]',
        'timeStampbind' => 'int',
        'hmacbind' => 'string'
    ];

    /**
      * Array of property to format mappings. Used for (de)serialization
      *
      * @var string[]
      */
    protected static $swaggerFormats = [
        'customerNumber' => null,
        'agentCode' => null,
        'productCode' => null,
        'externalMcc' => null,
        'customerType' => null,
        'shopList' => null,
        'posList' => null,
        'timeStampbind' => 'int64',
        'hmacbind' => 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 = [
        'customerNumber' => 'customerNumber',
        'agentCode' => 'agentCode',
        'productCode' => 'productCode',
        'externalMcc' => 'externalMcc',
        'customerType' => 'customerType',
        'shopList' => 'shopList',
        'posList' => 'posList',
        'timeStampbind' => 'timeStampbind',
        'hmacbind' => 'hmacbind'
    ];

    /**
     * Array of attributes to setter functions (for deserialization of responses)
     *
     * @var string[]
     */
    protected static $setters = [
        'customerNumber' => 'setCustomerNumber',
        'agentCode' => 'setAgentCode',
        'productCode' => 'setProductCode',
        'externalMcc' => 'setExternalMcc',
        'customerType' => 'setCustomerType',
        'shopList' => 'setShopList',
        'posList' => 'setPosList',
        'timeStampbind' => 'setTimeStampbind',
        'hmacbind' => 'setHmacbind'
    ];

    /**
     * Array of attributes to getter functions (for serialization of requests)
     *
     * @var string[]
     */
    protected static $getters = [
        'customerNumber' => 'getCustomerNumber',
        'agentCode' => 'getAgentCode',
        'productCode' => 'getProductCode',
        'externalMcc' => 'getExternalMcc',
        'customerType' => 'getCustomerType',
        'shopList' => 'getShopList',
        'posList' => 'getPosList',
        'timeStampbind' => 'getTimeStampbind',
        'hmacbind' => 'getHmacbind'
    ];

    /**
     * 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['customerNumber'] = isset($data['customerNumber']) ? $data['customerNumber'] : null;
        $this->container['agentCode'] = isset($data['agentCode']) ? $data['agentCode'] : null;
        $this->container['productCode'] = isset($data['productCode']) ? $data['productCode'] : null;
        $this->container['externalMcc'] = isset($data['externalMcc']) ? $data['externalMcc'] : null;
        $this->container['customerType'] = isset($data['customerType']) ? $data['customerType'] : null;
        $this->container['shopList'] = isset($data['shopList']) ? $data['shopList'] : null;
        $this->container['posList'] = isset($data['posList']) ? $data['posList'] : null;
        $this->container['timeStampbind'] = isset($data['timeStampbind']) ? $data['timeStampbind'] : null;
        $this->container['hmacbind'] = isset($data['hmacbind']) ? $data['hmacbind'] : 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 customerNumber
     *
     * @return string
     */
    public function getCustomerNumber()
    {
        return $this->container['customerNumber'];
    }

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

    /**
     * Gets shopList
     *
     * @return \Yeepay\Yop\Sdk\Service\Pos\Model\InstallPosWithProductPreShopParam[]
     */
    public function getShopList()
    {
        return $this->container['shopList'];
    }

    /**
     * Sets shopList
     *
     * @param \Yeepay\Yop\Sdk\Service\Pos\Model\InstallPosWithProductPreShopParam[] $shopList shopList
     *
     * @return $this
     */
    public function setShopList($shopList)
    {
        $this->container['shopList'] = $shopList;

        return $this;
    }

    /**
     * Gets posList
     *
     * @return \Yeepay\Yop\Sdk\Service\Pos\Model\InstallPosWithProductPrePosParam[]
     */
    public function getPosList()
    {
        return $this->container['posList'];
    }

    /**
     * Sets posList
     *
     * @param \Yeepay\Yop\Sdk\Service\Pos\Model\InstallPosWithProductPrePosParam[] $posList posList
     *
     * @return $this
     */
    public function setPosList($posList)
    {
        $this->container['posList'] = $posList;

        return $this;
    }

    /**
     * Gets timeStampbind
     *
     * @return int
     */
    public function getTimeStampbind()
    {
        return $this->container['timeStampbind'];
    }

    /**
     * Sets timeStampbind
     *
     * @param int $timeStampbind timeStampbind
     *
     * @return $this
     */
    public function setTimeStampbind($timeStampbind)
    {
        $this->container['timeStampbind'] = $timeStampbind;

        return $this;
    }

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

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

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

    /**
     * Gets offset.
     *
     * @param integer $offset Offset
     *
     * @return mixed
     */
    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
     */
    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
     */
    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));
    }
}


