<?php
/**
 * Boardingv1registrationsOrganizationInformationBusinessInformation
 *
 * 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;

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

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

    /**
      * Array of property to type mappings. Used for (de)serialization
      * @var string[]
      */
    protected static $swaggerTypes = [
        'name' => 'string',
        'doingBusinessAs' => 'string',
        'description' => 'string',
        'startDate' => '\DateTime',
        'address' => '\CyberSource\Model\Boardingv1registrationsOrganizationInformationBusinessInformationAddress',
        'timeZone' => 'string',
        'websiteUrl' => 'string',
        'type' => 'string',
        'taxId' => 'string',
        'phoneNumber' => 'string',
        'businessContact' => '\CyberSource\Model\Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact',
        'technicalContact' => '\CyberSource\Model\Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact',
        'emergencyContact' => '\CyberSource\Model\Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact',
        'merchantCategoryCode' => 'string'
    ];

    /**
      * Array of property to format mappings. Used for (de)serialization
      * @var string[]
      */
    protected static $swaggerFormats = [
        'name' => null,
        'doingBusinessAs' => null,
        'description' => null,
        'startDate' => 'date',
        'address' => null,
        'timeZone' => null,
        'websiteUrl' => null,
        'type' => null,
        'taxId' => null,
        'phoneNumber' => null,
        'businessContact' => null,
        'technicalContact' => null,
        'emergencyContact' => null,
        'merchantCategoryCode' => null
    ];

    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 = [
        'name' => 'name',
        'doingBusinessAs' => 'doingBusinessAs',
        'description' => 'description',
        'startDate' => 'startDate',
        'address' => 'address',
        'timeZone' => 'timeZone',
        'websiteUrl' => 'websiteUrl',
        'type' => 'type',
        'taxId' => 'taxId',
        'phoneNumber' => 'phoneNumber',
        'businessContact' => 'businessContact',
        'technicalContact' => 'technicalContact',
        'emergencyContact' => 'emergencyContact',
        'merchantCategoryCode' => 'merchantCategoryCode'
    ];


    /**
     * Array of attributes to setter functions (for deserialization of responses)
     * @var string[]
     */
    protected static $setters = [
        'name' => 'setName',
        'doingBusinessAs' => 'setDoingBusinessAs',
        'description' => 'setDescription',
        'startDate' => 'setStartDate',
        'address' => 'setAddress',
        'timeZone' => 'setTimeZone',
        'websiteUrl' => 'setWebsiteUrl',
        'type' => 'setType',
        'taxId' => 'setTaxId',
        'phoneNumber' => 'setPhoneNumber',
        'businessContact' => 'setBusinessContact',
        'technicalContact' => 'setTechnicalContact',
        'emergencyContact' => 'setEmergencyContact',
        'merchantCategoryCode' => 'setMerchantCategoryCode'
    ];


    /**
     * Array of attributes to getter functions (for serialization of requests)
     * @var string[]
     */
    protected static $getters = [
        'name' => 'getName',
        'doingBusinessAs' => 'getDoingBusinessAs',
        'description' => 'getDescription',
        'startDate' => 'getStartDate',
        'address' => 'getAddress',
        'timeZone' => 'getTimeZone',
        'websiteUrl' => 'getWebsiteUrl',
        'type' => 'getType',
        'taxId' => 'getTaxId',
        'phoneNumber' => 'getPhoneNumber',
        'businessContact' => 'getBusinessContact',
        'technicalContact' => 'getTechnicalContact',
        'emergencyContact' => 'getEmergencyContact',
        'merchantCategoryCode' => 'getMerchantCategoryCode'
    ];

    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['name'] = isset($data['name']) ? $data['name'] : null;
        $this->container['doingBusinessAs'] = isset($data['doingBusinessAs']) ? $data['doingBusinessAs'] : null;
        $this->container['description'] = isset($data['description']) ? $data['description'] : null;
        $this->container['startDate'] = isset($data['startDate']) ? $data['startDate'] : null;
        $this->container['address'] = isset($data['address']) ? $data['address'] : null;
        $this->container['timeZone'] = isset($data['timeZone']) ? $data['timeZone'] : null;
        $this->container['websiteUrl'] = isset($data['websiteUrl']) ? $data['websiteUrl'] : null;
        $this->container['type'] = isset($data['type']) ? $data['type'] : null;
        $this->container['taxId'] = isset($data['taxId']) ? $data['taxId'] : null;
        $this->container['phoneNumber'] = isset($data['phoneNumber']) ? $data['phoneNumber'] : null;
        $this->container['businessContact'] = isset($data['businessContact']) ? $data['businessContact'] : null;
        $this->container['technicalContact'] = isset($data['technicalContact']) ? $data['technicalContact'] : null;
        $this->container['emergencyContact'] = isset($data['emergencyContact']) ? $data['emergencyContact'] : null;
        $this->container['merchantCategoryCode'] = isset($data['merchantCategoryCode']) ? $data['merchantCategoryCode'] : null;
    }

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

        if ($this->container['name'] === null) {
            $invalid_properties[] = "'name' can't be null";
        }
        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()
    {

        if ($this->container['name'] === null) {
            return false;
        }
        return true;
    }


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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

    /**
     * Sets startDate
     * @param \DateTime $startDate `Format: YYYY-MM-DD` Example 2016-08-11 equals August 11, 2016
     * @return $this
     */
    public function setStartDate($startDate)
    {
        $this->container['startDate'] = $startDate;

        return $this;
    }

    /**
     * Gets address
     * @return \CyberSource\Model\Boardingv1registrationsOrganizationInformationBusinessInformationAddress
     */
    public function getAddress()
    {
        return $this->container['address'];
    }

    /**
     * Sets address
     * @param \CyberSource\Model\Boardingv1registrationsOrganizationInformationBusinessInformationAddress $address
     * @return $this
     */
    public function setAddress($address)
    {
        $this->container['address'] = $address;

        return $this;
    }

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

    /**
     * Sets timeZone
     * @param string $timeZone Merchant perferred time zone Possible Values: - 'Pacific/Pago_Pago' - 'Pacific/Honolulu' - 'America/Anchorage' - 'America/Vancouver' - 'America/Los_Angeles' - 'America/Phoenix' - 'America/Edmonton' - 'America/Denver' - 'America/Winnipeg' - 'America/Mexico_City' - 'America/Chicago' - 'America/Bogota' - 'America/Indianapolis' - 'America/New_York' - 'America/La_Paz' - 'America/Halifax' - 'America/St_Johns' - 'America/Buenos_Aires' - 'America/Godthab' - 'America/Sao_Paulo' - 'America/Noronha' - 'Atlantic/Cape_Verde' - 'GMT' - 'Europe/Dublin' - 'Europe/Lisbon' - 'Europe/London' - 'Africa/Tunis' - 'Europe/Vienna' - 'Europe/Brussels' - 'Europe/Zurich' - 'Europe/Prague' - 'Europe/Berlin' - 'Europe/Copenhagen' - 'Europe/Madrid' - 'Europe/Budapest' - 'Europe/Rome' - 'Africa/Tripoli' - 'Europe/Monaco' - 'Europe/Malta' - 'Europe/Amsterdam' - 'Europe/Oslo' - 'Europe/Warsaw' - 'Europe/Stockholm' - 'Europe/Belgrade' - 'Europe/Paris' - 'Africa/Johannesburg' - 'Europe/Minsk' - 'Africa/Cairo' - 'Europe/Helsinki' - 'Europe/Athens' - 'Asia/Jerusalem' - 'Europe/Riga' - 'Europe/Bucharest' - 'Europe/Istanbul' - 'Asia/Riyadh' - 'Europe/Moscow' - 'Asia/Dubai' - 'Asia/Baku' - 'Asia/Tbilisi' - 'Asia/Calcutta' - 'Asia/Katmandu' - 'Asia/Dacca' - 'Asia/Rangoon' - 'Asia/Jakarta' - 'Asia/Saigon' - 'Asia/Bangkok' - 'Australia/Perth' - 'Asia/Hong_Kong' - 'Asia/Macao' - 'Asia/Kuala_Lumpur' - 'Asia/Manila' - 'Asia/Singapore' - 'Asia/Taipei' - 'Asia/Shanghai' - 'Asia/Seoul' - 'Asia/Tokyo' - 'Asia/Yakutsk' - 'Australia/Adelaide' - 'Australia/Brisbane' - 'Australia/Broken_Hill' - 'Australia/Darwin' - 'Australia/Eucla' - 'Australia/Hobart' - 'Australia/Lindeman' - 'Australia/Sydney' - 'Australia/Lord_Howe' - 'Australia/Melbourne' - 'Asia/Magadan' - 'Pacific/Norfolk' - 'Pacific/Auckland'
     * @return $this
     */
    public function setTimeZone($timeZone)
    {
        $this->container['timeZone'] = $timeZone;

        return $this;
    }

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

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

        return $this;
    }

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

    /**
     * Sets type
     * @param string $type Business type Possible Values:   - 'PARTNERSHIP'   - 'SOLE_PROPRIETORSHIP'   - 'CORPORATION'   - 'LLC'   - 'NON_PROFIT'   - 'TRUST'
     * @return $this
     */
    public function setType($type)
    {
        $this->container['type'] = $type;

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

    /**
     * Gets businessContact
     * @return \CyberSource\Model\Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact
     */
    public function getBusinessContact()
    {
        return $this->container['businessContact'];
    }

    /**
     * Sets businessContact
     * @param \CyberSource\Model\Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact $businessContact
     * @return $this
     */
    public function setBusinessContact($businessContact)
    {
        $this->container['businessContact'] = $businessContact;

        return $this;
    }

    /**
     * Gets technicalContact
     * @return \CyberSource\Model\Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact
     */
    public function getTechnicalContact()
    {
        return $this->container['technicalContact'];
    }

    /**
     * Sets technicalContact
     * @param \CyberSource\Model\Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact $technicalContact
     * @return $this
     */
    public function setTechnicalContact($technicalContact)
    {
        $this->container['technicalContact'] = $technicalContact;

        return $this;
    }

    /**
     * Gets emergencyContact
     * @return \CyberSource\Model\Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact
     */
    public function getEmergencyContact()
    {
        return $this->container['emergencyContact'];
    }

    /**
     * Sets emergencyContact
     * @param \CyberSource\Model\Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact $emergencyContact
     * @return $this
     */
    public function setEmergencyContact($emergencyContact)
    {
        $this->container['emergencyContact'] = $emergencyContact;

        return $this;
    }

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

    /**
     * Sets merchantCategoryCode
     * @param string $merchantCategoryCode Industry standard Merchant Category Code (MCC)
     * @return $this
     */
    public function setMerchantCategoryCode($merchantCategoryCode)
    {
        $this->container['merchantCategoryCode'] = $merchantCategoryCode;

        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));
    }
}


