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

/**
 * Moosend API
 *
 * TODO: Add a description
 *
 * OpenAPI spec version: 1.0
 * 
 * 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 Swagger\Client\Model;

use \ArrayAccess;

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

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

    /**
      * Array of property to type mappings. Used for (de)serialization
      * @var string[]
      */
    protected static $swaggerTypes = [
        'date_time' => 'string',
        'timezone' => 'string'
    ];

    /**
      * Array of property to format mappings. Used for (de)serialization
      * @var string[]
      */
    protected static $swaggerFormats = [
        'date_time' => null,
        'timezone' => 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 = [
        'date_time' => 'DateTime',
        'timezone' => 'Timezone'
    ];


    /**
     * Array of attributes to setter functions (for deserialization of responses)
     * @var string[]
     */
    protected static $setters = [
        'date_time' => 'setDateTime',
        'timezone' => 'setTimezone'
    ];


    /**
     * Array of attributes to getter functions (for serialization of requests)
     * @var string[]
     */
    protected static $getters = [
        'date_time' => 'getDateTime',
        'timezone' => 'getTimezone'
    ];

    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['date_time'] = isset($data['date_time']) ? $data['date_time'] : null;
        $this->container['timezone'] = isset($data['timezone']) ? $data['timezone'] : null;
    }

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

        if ($this->container['date_time'] === null) {
            $invalid_properties[] = "'date_time' 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['date_time'] === null) {
            return false;
        }
        return true;
    }


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

    /**
     * Sets date_time
     * @param string $date_time The date and time at which the campaign will be delivered.
     * @return $this
     */
    public function setDateTime($date_time)
    {
        $this->container['date_time'] = $date_time;

        return $this;
    }

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

    /**
     * Sets timezone
     * @param string $timezone The timezone the specified date and time refers to. By default the timezone in your settings panel will be used. If specified, one of the following values must be used. * Dateline Standard Time * Samoa Standard Time * Hawaiian Standard Time * Alaskan Standard Time * Pacific Standard Time * Pacific Standard Time (Mexico) * US Mountain Standard Time * Mountain Standard Time (Mexico) * Mountain Standard Time * Central Standard Time * Central Standard Time (Mexico) * Canada Central Standard Time * SA Pacific Standard Time * US Eastern Standard Time * Eastern Standard Time * Venezuela Standard Time * Atlantic Standard Time * SA Western Standard Time * Central Brazilian Standard Time * Pacific SA Standard Time * Newfoundland Standard Time * E. South America Standard Time * Argentina Standard Time * SA Eastern Standard Time * Greenland Standard Time * Montevideo Standard Time * Mid-Atlantic Standard Time * Azores Standard Time * Cape Verde Standard Time * Greenwich Standard Time * GMT Standard Time * Morocco Standard Time * W. Central Africa Standard Time * Central European Standard Time * Romance Standard Time * W. Europe Standard Time * Namibia Standard Time * E. Europe Standard Time * Israel Standard Time * FLE Standard Time * South Africa Standard Time * Egypt Standard Time * Middle East Standard Time * GTB Standard Time * Jordan Standard Time * Iran Standard Time * Georgian Standard Time * E. Africa Standard Time * Russian Standard Time * Arab Standard Time * Arabic Standard Time * Caucasus Standard Time * Mauritius Standard Time * Azerbaijan Standard Time * Arabian Standard Time * Afghanistan Standard Time * West Asia Standard Time * Pakistan Standard Time * Ekaterinburg Standard Time * Sri Lanka Standard Time * India Standard Time * Nepal Standard Time * N. Central Asia Standard Time * Central Asia Standard Time * Myanmar Standard Time * North Asia Standard Time * SE Asia Standard Time * Taipei Standard Time * W. Australia Standard Time * Singapore Standard Time * North Asia East Standard Time * China Standard Time * Yakutsk Standard Time * Korea Standard Time * Tokyo Standard Time * AUS Central Standard Time * Cen. Australia Standard Time * AUS Eastern Standard Time * West Pacific Standard Time * Tasmania Standard Time * Vladivostok Standard Time * Central Pacific Standard Time * New Zealand Standard Time * Tonga Standard Time
     * @return $this
     */
    public function setTimezone($timezone)
    {
        $this->container['timezone'] = $timezone;

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

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


