<?php
/**
 * TimeDelayActionData
 *
 * PHP version 7.4
 *
 * @category Class
 * @package  KlaviyoAPI
 * @author   OpenAPI Generator team
 * @link     https://openapi-generator.tech
 */

/**
 * Klaviyo API
 *
 * The Klaviyo REST API. Please visit https://developers.klaviyo.com for more details.
 *
 * Contact: developers@klaviyo.com
 * Generated by: https://openapi-generator.tech
 * OpenAPI Generator version: 6.1.0
 */

/**
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

namespace KlaviyoAPI\Model;

use \ArrayAccess;
use \KlaviyoAPI\ObjectSerializer;

/**
 * TimeDelayActionData Class Doc Comment
 *
 * @category Class
 * @package  KlaviyoAPI
 * @author   OpenAPI Generator team
 * @link     https://openapi-generator.tech
 * @implements \ArrayAccess<string, mixed>
 */
class TimeDelayActionData implements ModelInterface, ArrayAccess, \JsonSerializable
{
    public const DISCRIMINATOR = null;

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

    /**
      * Array of property to type mappings. Used for (de)serialization
      *
      * @var string[]
      */
    protected static $openAPITypes = [
        'unit' => 'string',
        'value' => 'int',
        'secondary_value' => 'int',
        'timezone' => 'string',
        'delay_until_time' => 'string',
        'delay_until_weekdays' => 'string[]'
    ];

    /**
      * Array of property to format mappings. Used for (de)serialization
      *
      * @var string[]
      * @phpstan-var array<string, string|null>
      * @psalm-var array<string, string|null>
      */
    protected static $openAPIFormats = [
        'unit' => null,
        'value' => null,
        'secondary_value' => null,
        'timezone' => null,
        'delay_until_time' => 'time',
        'delay_until_weekdays' => null
    ];

    /**
      * Array of nullable properties. Used for (de)serialization
      *
      * @var boolean[]
      */
    protected static array $openAPINullables = [
        'unit' => false,
		'value' => false,
		'secondary_value' => true,
		'timezone' => false,
		'delay_until_time' => true,
		'delay_until_weekdays' => true
    ];

    /**
      * If a nullable field gets set to null, insert it here
      *
      * @var boolean[]
      */
    protected array $openAPINullablesSetToNull = [];

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

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

    /**
     * Array of nullable properties
     *
     * @return array
     */
    protected static function openAPINullables(): array
    {
        return self::$openAPINullables;
    }

    /**
     * Array of nullable field names deliberately set to null
     *
     * @return boolean[]
     */
    private function getOpenAPINullablesSetToNull(): array
    {
        return $this->openAPINullablesSetToNull;
    }

    /**
     * Checks if a property is nullable
     *
     * @param string $property
     * @return bool
     */
    public static function isNullable(string $property): bool
    {
        return self::openAPINullables()[$property] ?? false;
    }

    /**
     * Checks if a nullable property is set to null.
     *
     * @param string $property
     * @return bool
     */
    public function isNullableSetToNull(string $property): bool
    {
        return in_array($property, $this->getOpenAPINullablesSetToNull(), true);
    }

    /**
     * Array of attributes where the key is the local name,
     * and the value is the original name
     *
     * @var string[]
     */
    protected static $attributeMap = [
        'unit' => 'unit',
        'value' => 'value',
        'secondary_value' => 'secondary_value',
        'timezone' => 'timezone',
        'delay_until_time' => 'delay_until_time',
        'delay_until_weekdays' => 'delay_until_weekdays'
    ];

    /**
     * Array of attributes to setter functions (for deserialization of responses)
     *
     * @var string[]
     */
    protected static $setters = [
        'unit' => 'setUnit',
        'value' => 'setValue',
        'secondary_value' => 'setSecondaryValue',
        'timezone' => 'setTimezone',
        'delay_until_time' => 'setDelayUntilTime',
        'delay_until_weekdays' => 'setDelayUntilWeekdays'
    ];

    /**
     * Array of attributes to getter functions (for serialization of requests)
     *
     * @var string[]
     */
    protected static $getters = [
        'unit' => 'getUnit',
        'value' => 'getValue',
        'secondary_value' => 'getSecondaryValue',
        'timezone' => 'getTimezone',
        'delay_until_time' => 'getDelayUntilTime',
        'delay_until_weekdays' => 'getDelayUntilWeekdays'
    ];

    /**
     * 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::$openAPIModelName;
    }

    public const UNIT_DAYS = 'days';
    public const UNIT_HOURS = 'hours';
    public const UNIT_MINUTES = 'minutes';
    public const TIMEZONE_AFRICA_ABIDJAN = 'Africa/Abidjan';
    public const TIMEZONE_AFRICA_ACCRA = 'Africa/Accra';
    public const TIMEZONE_AFRICA_ADDIS_ABABA = 'Africa/Addis_Ababa';
    public const TIMEZONE_AFRICA_ALGIERS = 'Africa/Algiers';
    public const TIMEZONE_AFRICA_ASMARA = 'Africa/Asmara';
    public const TIMEZONE_AFRICA_BAMAKO = 'Africa/Bamako';
    public const TIMEZONE_AFRICA_BANGUI = 'Africa/Bangui';
    public const TIMEZONE_AFRICA_BANJUL = 'Africa/Banjul';
    public const TIMEZONE_AFRICA_BISSAU = 'Africa/Bissau';
    public const TIMEZONE_AFRICA_BLANTYRE = 'Africa/Blantyre';
    public const TIMEZONE_AFRICA_BRAZZAVILLE = 'Africa/Brazzaville';
    public const TIMEZONE_AFRICA_BUJUMBURA = 'Africa/Bujumbura';
    public const TIMEZONE_AFRICA_CAIRO = 'Africa/Cairo';
    public const TIMEZONE_AFRICA_CASABLANCA = 'Africa/Casablanca';
    public const TIMEZONE_AFRICA_CEUTA = 'Africa/Ceuta';
    public const TIMEZONE_AFRICA_CONAKRY = 'Africa/Conakry';
    public const TIMEZONE_AFRICA_DAKAR = 'Africa/Dakar';
    public const TIMEZONE_AFRICA_DAR_ES_SALAAM = 'Africa/Dar_es_Salaam';
    public const TIMEZONE_AFRICA_DJIBOUTI = 'Africa/Djibouti';
    public const TIMEZONE_AFRICA_DOUALA = 'Africa/Douala';
    public const TIMEZONE_AFRICA_EL_AAIUN = 'Africa/El_Aaiun';
    public const TIMEZONE_AFRICA_FREETOWN = 'Africa/Freetown';
    public const TIMEZONE_AFRICA_GABORONE = 'Africa/Gaborone';
    public const TIMEZONE_AFRICA_HARARE = 'Africa/Harare';
    public const TIMEZONE_AFRICA_JOHANNESBURG = 'Africa/Johannesburg';
    public const TIMEZONE_AFRICA_JUBA = 'Africa/Juba';
    public const TIMEZONE_AFRICA_KAMPALA = 'Africa/Kampala';
    public const TIMEZONE_AFRICA_KHARTOUM = 'Africa/Khartoum';
    public const TIMEZONE_AFRICA_KIGALI = 'Africa/Kigali';
    public const TIMEZONE_AFRICA_KINSHASA = 'Africa/Kinshasa';
    public const TIMEZONE_AFRICA_LAGOS = 'Africa/Lagos';
    public const TIMEZONE_AFRICA_LIBREVILLE = 'Africa/Libreville';
    public const TIMEZONE_AFRICA_LOME = 'Africa/Lome';
    public const TIMEZONE_AFRICA_LUANDA = 'Africa/Luanda';
    public const TIMEZONE_AFRICA_LUBUMBASHI = 'Africa/Lubumbashi';
    public const TIMEZONE_AFRICA_LUSAKA = 'Africa/Lusaka';
    public const TIMEZONE_AFRICA_MALABO = 'Africa/Malabo';
    public const TIMEZONE_AFRICA_MAPUTO = 'Africa/Maputo';
    public const TIMEZONE_AFRICA_MASERU = 'Africa/Maseru';
    public const TIMEZONE_AFRICA_MBABANE = 'Africa/Mbabane';
    public const TIMEZONE_AFRICA_MOGADISHU = 'Africa/Mogadishu';
    public const TIMEZONE_AFRICA_MONROVIA = 'Africa/Monrovia';
    public const TIMEZONE_AFRICA_NAIROBI = 'Africa/Nairobi';
    public const TIMEZONE_AFRICA_NDJAMENA = 'Africa/Ndjamena';
    public const TIMEZONE_AFRICA_NIAMEY = 'Africa/Niamey';
    public const TIMEZONE_AFRICA_NOUAKCHOTT = 'Africa/Nouakchott';
    public const TIMEZONE_AFRICA_OUAGADOUGOU = 'Africa/Ouagadougou';
    public const TIMEZONE_AFRICA_PORTO_NOVO = 'Africa/Porto-Novo';
    public const TIMEZONE_AFRICA_SAO_TOME = 'Africa/Sao_Tome';
    public const TIMEZONE_AFRICA_TRIPOLI = 'Africa/Tripoli';
    public const TIMEZONE_AFRICA_TUNIS = 'Africa/Tunis';
    public const TIMEZONE_AFRICA_WINDHOEK = 'Africa/Windhoek';
    public const TIMEZONE_AMERICA_ADAK = 'America/Adak';
    public const TIMEZONE_AMERICA_ANCHORAGE = 'America/Anchorage';
    public const TIMEZONE_AMERICA_ANGUILLA = 'America/Anguilla';
    public const TIMEZONE_AMERICA_ANTIGUA = 'America/Antigua';
    public const TIMEZONE_AMERICA_ARAGUAINA = 'America/Araguaina';
    public const TIMEZONE_AMERICA_ARGENTINA_BUENOS_AIRES = 'America/Argentina/Buenos_Aires';
    public const TIMEZONE_AMERICA_ARGENTINA_CATAMARCA = 'America/Argentina/Catamarca';
    public const TIMEZONE_AMERICA_ARGENTINA_CORDOBA = 'America/Argentina/Cordoba';
    public const TIMEZONE_AMERICA_ARGENTINA_JUJUY = 'America/Argentina/Jujuy';
    public const TIMEZONE_AMERICA_ARGENTINA_LA_RIOJA = 'America/Argentina/La_Rioja';
    public const TIMEZONE_AMERICA_ARGENTINA_MENDOZA = 'America/Argentina/Mendoza';
    public const TIMEZONE_AMERICA_ARGENTINA_RIO_GALLEGOS = 'America/Argentina/Rio_Gallegos';
    public const TIMEZONE_AMERICA_ARGENTINA_SALTA = 'America/Argentina/Salta';
    public const TIMEZONE_AMERICA_ARGENTINA_SAN_JUAN = 'America/Argentina/San_Juan';
    public const TIMEZONE_AMERICA_ARGENTINA_SAN_LUIS = 'America/Argentina/San_Luis';
    public const TIMEZONE_AMERICA_ARGENTINA_TUCUMAN = 'America/Argentina/Tucuman';
    public const TIMEZONE_AMERICA_ARGENTINA_USHUAIA = 'America/Argentina/Ushuaia';
    public const TIMEZONE_AMERICA_ARUBA = 'America/Aruba';
    public const TIMEZONE_AMERICA_ASUNCION = 'America/Asuncion';
    public const TIMEZONE_AMERICA_ATIKOKAN = 'America/Atikokan';
    public const TIMEZONE_AMERICA_BAHIA = 'America/Bahia';
    public const TIMEZONE_AMERICA_BAHIA_BANDERAS = 'America/Bahia_Banderas';
    public const TIMEZONE_AMERICA_BARBADOS = 'America/Barbados';
    public const TIMEZONE_AMERICA_BELEM = 'America/Belem';
    public const TIMEZONE_AMERICA_BELIZE = 'America/Belize';
    public const TIMEZONE_AMERICA_BLANC_SABLON = 'America/Blanc-Sablon';
    public const TIMEZONE_AMERICA_BOA_VISTA = 'America/Boa_Vista';
    public const TIMEZONE_AMERICA_BOGOTA = 'America/Bogota';
    public const TIMEZONE_AMERICA_BOISE = 'America/Boise';
    public const TIMEZONE_AMERICA_CAMBRIDGE_BAY = 'America/Cambridge_Bay';
    public const TIMEZONE_AMERICA_CAMPO_GRANDE = 'America/Campo_Grande';
    public const TIMEZONE_AMERICA_CANCUN = 'America/Cancun';
    public const TIMEZONE_AMERICA_CARACAS = 'America/Caracas';
    public const TIMEZONE_AMERICA_CAYENNE = 'America/Cayenne';
    public const TIMEZONE_AMERICA_CAYMAN = 'America/Cayman';
    public const TIMEZONE_AMERICA_CHICAGO = 'America/Chicago';
    public const TIMEZONE_AMERICA_CHIHUAHUA = 'America/Chihuahua';
    public const TIMEZONE_AMERICA_CIUDAD_JUAREZ = 'America/Ciudad_Juarez';
    public const TIMEZONE_AMERICA_COSTA_RICA = 'America/Costa_Rica';
    public const TIMEZONE_AMERICA_CRESTON = 'America/Creston';
    public const TIMEZONE_AMERICA_CUIABA = 'America/Cuiaba';
    public const TIMEZONE_AMERICA_CURACAO = 'America/Curacao';
    public const TIMEZONE_AMERICA_DANMARKSHAVN = 'America/Danmarkshavn';
    public const TIMEZONE_AMERICA_DAWSON = 'America/Dawson';
    public const TIMEZONE_AMERICA_DAWSON_CREEK = 'America/Dawson_Creek';
    public const TIMEZONE_AMERICA_DENVER = 'America/Denver';
    public const TIMEZONE_AMERICA_DETROIT = 'America/Detroit';
    public const TIMEZONE_AMERICA_DOMINICA = 'America/Dominica';
    public const TIMEZONE_AMERICA_EDMONTON = 'America/Edmonton';
    public const TIMEZONE_AMERICA_EIRUNEPE = 'America/Eirunepe';
    public const TIMEZONE_AMERICA_EL_SALVADOR = 'America/El_Salvador';
    public const TIMEZONE_AMERICA_FORT_NELSON = 'America/Fort_Nelson';
    public const TIMEZONE_AMERICA_FORTALEZA = 'America/Fortaleza';
    public const TIMEZONE_AMERICA_GLACE_BAY = 'America/Glace_Bay';
    public const TIMEZONE_AMERICA_GOOSE_BAY = 'America/Goose_Bay';
    public const TIMEZONE_AMERICA_GRAND_TURK = 'America/Grand_Turk';
    public const TIMEZONE_AMERICA_GRENADA = 'America/Grenada';
    public const TIMEZONE_AMERICA_GUADELOUPE = 'America/Guadeloupe';
    public const TIMEZONE_AMERICA_GUATEMALA = 'America/Guatemala';
    public const TIMEZONE_AMERICA_GUAYAQUIL = 'America/Guayaquil';
    public const TIMEZONE_AMERICA_GUYANA = 'America/Guyana';
    public const TIMEZONE_AMERICA_HALIFAX = 'America/Halifax';
    public const TIMEZONE_AMERICA_HAVANA = 'America/Havana';
    public const TIMEZONE_AMERICA_HERMOSILLO = 'America/Hermosillo';
    public const TIMEZONE_AMERICA_INDIANA_INDIANAPOLIS = 'America/Indiana/Indianapolis';
    public const TIMEZONE_AMERICA_INDIANA_KNOX = 'America/Indiana/Knox';
    public const TIMEZONE_AMERICA_INDIANA_MARENGO = 'America/Indiana/Marengo';
    public const TIMEZONE_AMERICA_INDIANA_PETERSBURG = 'America/Indiana/Petersburg';
    public const TIMEZONE_AMERICA_INDIANA_TELL_CITY = 'America/Indiana/Tell_City';
    public const TIMEZONE_AMERICA_INDIANA_VEVAY = 'America/Indiana/Vevay';
    public const TIMEZONE_AMERICA_INDIANA_VINCENNES = 'America/Indiana/Vincennes';
    public const TIMEZONE_AMERICA_INDIANA_WINAMAC = 'America/Indiana/Winamac';
    public const TIMEZONE_AMERICA_INUVIK = 'America/Inuvik';
    public const TIMEZONE_AMERICA_IQALUIT = 'America/Iqaluit';
    public const TIMEZONE_AMERICA_JAMAICA = 'America/Jamaica';
    public const TIMEZONE_AMERICA_JUNEAU = 'America/Juneau';
    public const TIMEZONE_AMERICA_KENTUCKY_LOUISVILLE = 'America/Kentucky/Louisville';
    public const TIMEZONE_AMERICA_KENTUCKY_MONTICELLO = 'America/Kentucky/Monticello';
    public const TIMEZONE_AMERICA_KRALENDIJK = 'America/Kralendijk';
    public const TIMEZONE_AMERICA_LA_PAZ = 'America/La_Paz';
    public const TIMEZONE_AMERICA_LIMA = 'America/Lima';
    public const TIMEZONE_AMERICA_LOS_ANGELES = 'America/Los_Angeles';
    public const TIMEZONE_AMERICA_LOWER_PRINCES = 'America/Lower_Princes';
    public const TIMEZONE_AMERICA_MACEIO = 'America/Maceio';
    public const TIMEZONE_AMERICA_MANAGUA = 'America/Managua';
    public const TIMEZONE_AMERICA_MANAUS = 'America/Manaus';
    public const TIMEZONE_AMERICA_MARIGOT = 'America/Marigot';
    public const TIMEZONE_AMERICA_MARTINIQUE = 'America/Martinique';
    public const TIMEZONE_AMERICA_MATAMOROS = 'America/Matamoros';
    public const TIMEZONE_AMERICA_MAZATLAN = 'America/Mazatlan';
    public const TIMEZONE_AMERICA_MENOMINEE = 'America/Menominee';
    public const TIMEZONE_AMERICA_MERIDA = 'America/Merida';
    public const TIMEZONE_AMERICA_METLAKATLA = 'America/Metlakatla';
    public const TIMEZONE_AMERICA_MEXICO_CITY = 'America/Mexico_City';
    public const TIMEZONE_AMERICA_MIQUELON = 'America/Miquelon';
    public const TIMEZONE_AMERICA_MONCTON = 'America/Moncton';
    public const TIMEZONE_AMERICA_MONTERREY = 'America/Monterrey';
    public const TIMEZONE_AMERICA_MONTEVIDEO = 'America/Montevideo';
    public const TIMEZONE_AMERICA_MONTSERRAT = 'America/Montserrat';
    public const TIMEZONE_AMERICA_NASSAU = 'America/Nassau';
    public const TIMEZONE_AMERICA_NEW_YORK = 'America/New_York';
    public const TIMEZONE_AMERICA_NOME = 'America/Nome';
    public const TIMEZONE_AMERICA_NORONHA = 'America/Noronha';
    public const TIMEZONE_AMERICA_NORTH_DAKOTA_BEULAH = 'America/North_Dakota/Beulah';
    public const TIMEZONE_AMERICA_NORTH_DAKOTA_CENTER = 'America/North_Dakota/Center';
    public const TIMEZONE_AMERICA_NORTH_DAKOTA_NEW_SALEM = 'America/North_Dakota/New_Salem';
    public const TIMEZONE_AMERICA_NUUK = 'America/Nuuk';
    public const TIMEZONE_AMERICA_OJINAGA = 'America/Ojinaga';
    public const TIMEZONE_AMERICA_PANAMA = 'America/Panama';
    public const TIMEZONE_AMERICA_PARAMARIBO = 'America/Paramaribo';
    public const TIMEZONE_AMERICA_PHOENIX = 'America/Phoenix';
    public const TIMEZONE_AMERICA_PORT_AU_PRINCE = 'America/Port-au-Prince';
    public const TIMEZONE_AMERICA_PORT_OF_SPAIN = 'America/Port_of_Spain';
    public const TIMEZONE_AMERICA_PORTO_VELHO = 'America/Porto_Velho';
    public const TIMEZONE_AMERICA_PUERTO_RICO = 'America/Puerto_Rico';
    public const TIMEZONE_AMERICA_PUNTA_ARENAS = 'America/Punta_Arenas';
    public const TIMEZONE_AMERICA_RANKIN_INLET = 'America/Rankin_Inlet';
    public const TIMEZONE_AMERICA_RECIFE = 'America/Recife';
    public const TIMEZONE_AMERICA_REGINA = 'America/Regina';
    public const TIMEZONE_AMERICA_RESOLUTE = 'America/Resolute';
    public const TIMEZONE_AMERICA_RIO_BRANCO = 'America/Rio_Branco';
    public const TIMEZONE_AMERICA_SANTAREM = 'America/Santarem';
    public const TIMEZONE_AMERICA_SANTIAGO = 'America/Santiago';
    public const TIMEZONE_AMERICA_SANTO_DOMINGO = 'America/Santo_Domingo';
    public const TIMEZONE_AMERICA_SAO_PAULO = 'America/Sao_Paulo';
    public const TIMEZONE_AMERICA_SCORESBYSUND = 'America/Scoresbysund';
    public const TIMEZONE_AMERICA_SITKA = 'America/Sitka';
    public const TIMEZONE_AMERICA_ST_BARTHELEMY = 'America/St_Barthelemy';
    public const TIMEZONE_AMERICA_ST_JOHNS = 'America/St_Johns';
    public const TIMEZONE_AMERICA_ST_KITTS = 'America/St_Kitts';
    public const TIMEZONE_AMERICA_ST_LUCIA = 'America/St_Lucia';
    public const TIMEZONE_AMERICA_ST_THOMAS = 'America/St_Thomas';
    public const TIMEZONE_AMERICA_ST_VINCENT = 'America/St_Vincent';
    public const TIMEZONE_AMERICA_SWIFT_CURRENT = 'America/Swift_Current';
    public const TIMEZONE_AMERICA_TEGUCIGALPA = 'America/Tegucigalpa';
    public const TIMEZONE_AMERICA_THULE = 'America/Thule';
    public const TIMEZONE_AMERICA_TIJUANA = 'America/Tijuana';
    public const TIMEZONE_AMERICA_TORONTO = 'America/Toronto';
    public const TIMEZONE_AMERICA_TORTOLA = 'America/Tortola';
    public const TIMEZONE_AMERICA_VANCOUVER = 'America/Vancouver';
    public const TIMEZONE_AMERICA_WHITEHORSE = 'America/Whitehorse';
    public const TIMEZONE_AMERICA_WINNIPEG = 'America/Winnipeg';
    public const TIMEZONE_AMERICA_YAKUTAT = 'America/Yakutat';
    public const TIMEZONE_ANTARCTICA_CASEY = 'Antarctica/Casey';
    public const TIMEZONE_ANTARCTICA_DAVIS = 'Antarctica/Davis';
    public const TIMEZONE_ANTARCTICA_DUMONT_D_URVILLE = 'Antarctica/DumontDUrville';
    public const TIMEZONE_ANTARCTICA_MACQUARIE = 'Antarctica/Macquarie';
    public const TIMEZONE_ANTARCTICA_MAWSON = 'Antarctica/Mawson';
    public const TIMEZONE_ANTARCTICA_MC_MURDO = 'Antarctica/McMurdo';
    public const TIMEZONE_ANTARCTICA_PALMER = 'Antarctica/Palmer';
    public const TIMEZONE_ANTARCTICA_ROTHERA = 'Antarctica/Rothera';
    public const TIMEZONE_ANTARCTICA_SYOWA = 'Antarctica/Syowa';
    public const TIMEZONE_ANTARCTICA_TROLL = 'Antarctica/Troll';
    public const TIMEZONE_ANTARCTICA_VOSTOK = 'Antarctica/Vostok';
    public const TIMEZONE_ARCTIC_LONGYEARBYEN = 'Arctic/Longyearbyen';
    public const TIMEZONE_ASIA_ADEN = 'Asia/Aden';
    public const TIMEZONE_ASIA_ALMATY = 'Asia/Almaty';
    public const TIMEZONE_ASIA_AMMAN = 'Asia/Amman';
    public const TIMEZONE_ASIA_ANADYR = 'Asia/Anadyr';
    public const TIMEZONE_ASIA_AQTAU = 'Asia/Aqtau';
    public const TIMEZONE_ASIA_AQTOBE = 'Asia/Aqtobe';
    public const TIMEZONE_ASIA_ASHGABAT = 'Asia/Ashgabat';
    public const TIMEZONE_ASIA_ATYRAU = 'Asia/Atyrau';
    public const TIMEZONE_ASIA_BAGHDAD = 'Asia/Baghdad';
    public const TIMEZONE_ASIA_BAHRAIN = 'Asia/Bahrain';
    public const TIMEZONE_ASIA_BAKU = 'Asia/Baku';
    public const TIMEZONE_ASIA_BANGKOK = 'Asia/Bangkok';
    public const TIMEZONE_ASIA_BARNAUL = 'Asia/Barnaul';
    public const TIMEZONE_ASIA_BEIRUT = 'Asia/Beirut';
    public const TIMEZONE_ASIA_BISHKEK = 'Asia/Bishkek';
    public const TIMEZONE_ASIA_BRUNEI = 'Asia/Brunei';
    public const TIMEZONE_ASIA_CHITA = 'Asia/Chita';
    public const TIMEZONE_ASIA_CHOIBALSAN = 'Asia/Choibalsan';
    public const TIMEZONE_ASIA_COLOMBO = 'Asia/Colombo';
    public const TIMEZONE_ASIA_DAMASCUS = 'Asia/Damascus';
    public const TIMEZONE_ASIA_DHAKA = 'Asia/Dhaka';
    public const TIMEZONE_ASIA_DILI = 'Asia/Dili';
    public const TIMEZONE_ASIA_DUBAI = 'Asia/Dubai';
    public const TIMEZONE_ASIA_DUSHANBE = 'Asia/Dushanbe';
    public const TIMEZONE_ASIA_FAMAGUSTA = 'Asia/Famagusta';
    public const TIMEZONE_ASIA_GAZA = 'Asia/Gaza';
    public const TIMEZONE_ASIA_HEBRON = 'Asia/Hebron';
    public const TIMEZONE_ASIA_HO_CHI_MINH = 'Asia/Ho_Chi_Minh';
    public const TIMEZONE_ASIA_HONG_KONG = 'Asia/Hong_Kong';
    public const TIMEZONE_ASIA_HOVD = 'Asia/Hovd';
    public const TIMEZONE_ASIA_IRKUTSK = 'Asia/Irkutsk';
    public const TIMEZONE_ASIA_JAKARTA = 'Asia/Jakarta';
    public const TIMEZONE_ASIA_JAYAPURA = 'Asia/Jayapura';
    public const TIMEZONE_ASIA_JERUSALEM = 'Asia/Jerusalem';
    public const TIMEZONE_ASIA_KABUL = 'Asia/Kabul';
    public const TIMEZONE_ASIA_KAMCHATKA = 'Asia/Kamchatka';
    public const TIMEZONE_ASIA_KARACHI = 'Asia/Karachi';
    public const TIMEZONE_ASIA_KATHMANDU = 'Asia/Kathmandu';
    public const TIMEZONE_ASIA_KHANDYGA = 'Asia/Khandyga';
    public const TIMEZONE_ASIA_KOLKATA = 'Asia/Kolkata';
    public const TIMEZONE_ASIA_KRASNOYARSK = 'Asia/Krasnoyarsk';
    public const TIMEZONE_ASIA_KUALA_LUMPUR = 'Asia/Kuala_Lumpur';
    public const TIMEZONE_ASIA_KUCHING = 'Asia/Kuching';
    public const TIMEZONE_ASIA_KUWAIT = 'Asia/Kuwait';
    public const TIMEZONE_ASIA_MACAU = 'Asia/Macau';
    public const TIMEZONE_ASIA_MAGADAN = 'Asia/Magadan';
    public const TIMEZONE_ASIA_MAKASSAR = 'Asia/Makassar';
    public const TIMEZONE_ASIA_MANILA = 'Asia/Manila';
    public const TIMEZONE_ASIA_MUSCAT = 'Asia/Muscat';
    public const TIMEZONE_ASIA_NICOSIA = 'Asia/Nicosia';
    public const TIMEZONE_ASIA_NOVOKUZNETSK = 'Asia/Novokuznetsk';
    public const TIMEZONE_ASIA_NOVOSIBIRSK = 'Asia/Novosibirsk';
    public const TIMEZONE_ASIA_OMSK = 'Asia/Omsk';
    public const TIMEZONE_ASIA_ORAL = 'Asia/Oral';
    public const TIMEZONE_ASIA_PHNOM_PENH = 'Asia/Phnom_Penh';
    public const TIMEZONE_ASIA_PONTIANAK = 'Asia/Pontianak';
    public const TIMEZONE_ASIA_PYONGYANG = 'Asia/Pyongyang';
    public const TIMEZONE_ASIA_QATAR = 'Asia/Qatar';
    public const TIMEZONE_ASIA_QOSTANAY = 'Asia/Qostanay';
    public const TIMEZONE_ASIA_QYZYLORDA = 'Asia/Qyzylorda';
    public const TIMEZONE_ASIA_RIYADH = 'Asia/Riyadh';
    public const TIMEZONE_ASIA_SAKHALIN = 'Asia/Sakhalin';
    public const TIMEZONE_ASIA_SAMARKAND = 'Asia/Samarkand';
    public const TIMEZONE_ASIA_SEOUL = 'Asia/Seoul';
    public const TIMEZONE_ASIA_SHANGHAI = 'Asia/Shanghai';
    public const TIMEZONE_ASIA_SINGAPORE = 'Asia/Singapore';
    public const TIMEZONE_ASIA_SREDNEKOLYMSK = 'Asia/Srednekolymsk';
    public const TIMEZONE_ASIA_TAIPEI = 'Asia/Taipei';
    public const TIMEZONE_ASIA_TASHKENT = 'Asia/Tashkent';
    public const TIMEZONE_ASIA_TBILISI = 'Asia/Tbilisi';
    public const TIMEZONE_ASIA_TEHRAN = 'Asia/Tehran';
    public const TIMEZONE_ASIA_THIMPHU = 'Asia/Thimphu';
    public const TIMEZONE_ASIA_TOKYO = 'Asia/Tokyo';
    public const TIMEZONE_ASIA_TOMSK = 'Asia/Tomsk';
    public const TIMEZONE_ASIA_ULAANBAATAR = 'Asia/Ulaanbaatar';
    public const TIMEZONE_ASIA_URUMQI = 'Asia/Urumqi';
    public const TIMEZONE_ASIA_UST_NERA = 'Asia/Ust-Nera';
    public const TIMEZONE_ASIA_VIENTIANE = 'Asia/Vientiane';
    public const TIMEZONE_ASIA_VLADIVOSTOK = 'Asia/Vladivostok';
    public const TIMEZONE_ASIA_YAKUTSK = 'Asia/Yakutsk';
    public const TIMEZONE_ASIA_YANGON = 'Asia/Yangon';
    public const TIMEZONE_ASIA_YEKATERINBURG = 'Asia/Yekaterinburg';
    public const TIMEZONE_ASIA_YEREVAN = 'Asia/Yerevan';
    public const TIMEZONE_ATLANTIC_AZORES = 'Atlantic/Azores';
    public const TIMEZONE_ATLANTIC_BERMUDA = 'Atlantic/Bermuda';
    public const TIMEZONE_ATLANTIC_CANARY = 'Atlantic/Canary';
    public const TIMEZONE_ATLANTIC_CAPE_VERDE = 'Atlantic/Cape_Verde';
    public const TIMEZONE_ATLANTIC_FAROE = 'Atlantic/Faroe';
    public const TIMEZONE_ATLANTIC_MADEIRA = 'Atlantic/Madeira';
    public const TIMEZONE_ATLANTIC_REYKJAVIK = 'Atlantic/Reykjavik';
    public const TIMEZONE_ATLANTIC_SOUTH_GEORGIA = 'Atlantic/South_Georgia';
    public const TIMEZONE_ATLANTIC_ST_HELENA = 'Atlantic/St_Helena';
    public const TIMEZONE_ATLANTIC_STANLEY = 'Atlantic/Stanley';
    public const TIMEZONE_AUSTRALIA_ADELAIDE = 'Australia/Adelaide';
    public const TIMEZONE_AUSTRALIA_BRISBANE = 'Australia/Brisbane';
    public const TIMEZONE_AUSTRALIA_BROKEN_HILL = 'Australia/Broken_Hill';
    public const TIMEZONE_AUSTRALIA_DARWIN = 'Australia/Darwin';
    public const TIMEZONE_AUSTRALIA_EUCLA = 'Australia/Eucla';
    public const TIMEZONE_AUSTRALIA_HOBART = 'Australia/Hobart';
    public const TIMEZONE_AUSTRALIA_LINDEMAN = 'Australia/Lindeman';
    public const TIMEZONE_AUSTRALIA_LORD_HOWE = 'Australia/Lord_Howe';
    public const TIMEZONE_AUSTRALIA_MELBOURNE = 'Australia/Melbourne';
    public const TIMEZONE_AUSTRALIA_PERTH = 'Australia/Perth';
    public const TIMEZONE_AUSTRALIA_SYDNEY = 'Australia/Sydney';
    public const TIMEZONE_CANADA_ATLANTIC = 'Canada/Atlantic';
    public const TIMEZONE_CANADA_CENTRAL = 'Canada/Central';
    public const TIMEZONE_CANADA_EASTERN = 'Canada/Eastern';
    public const TIMEZONE_CANADA_MOUNTAIN = 'Canada/Mountain';
    public const TIMEZONE_CANADA_NEWFOUNDLAND = 'Canada/Newfoundland';
    public const TIMEZONE_CANADA_PACIFIC = 'Canada/Pacific';
    public const TIMEZONE_EUROPE_AMSTERDAM = 'Europe/Amsterdam';
    public const TIMEZONE_EUROPE_ANDORRA = 'Europe/Andorra';
    public const TIMEZONE_EUROPE_ASTRAKHAN = 'Europe/Astrakhan';
    public const TIMEZONE_EUROPE_ATHENS = 'Europe/Athens';
    public const TIMEZONE_EUROPE_BELGRADE = 'Europe/Belgrade';
    public const TIMEZONE_EUROPE_BERLIN = 'Europe/Berlin';
    public const TIMEZONE_EUROPE_BRATISLAVA = 'Europe/Bratislava';
    public const TIMEZONE_EUROPE_BRUSSELS = 'Europe/Brussels';
    public const TIMEZONE_EUROPE_BUCHAREST = 'Europe/Bucharest';
    public const TIMEZONE_EUROPE_BUDAPEST = 'Europe/Budapest';
    public const TIMEZONE_EUROPE_BUSINGEN = 'Europe/Busingen';
    public const TIMEZONE_EUROPE_CHISINAU = 'Europe/Chisinau';
    public const TIMEZONE_EUROPE_COPENHAGEN = 'Europe/Copenhagen';
    public const TIMEZONE_EUROPE_DUBLIN = 'Europe/Dublin';
    public const TIMEZONE_EUROPE_GIBRALTAR = 'Europe/Gibraltar';
    public const TIMEZONE_EUROPE_GUERNSEY = 'Europe/Guernsey';
    public const TIMEZONE_EUROPE_HELSINKI = 'Europe/Helsinki';
    public const TIMEZONE_EUROPE_ISLE_OF_MAN = 'Europe/Isle_of_Man';
    public const TIMEZONE_EUROPE_ISTANBUL = 'Europe/Istanbul';
    public const TIMEZONE_EUROPE_JERSEY = 'Europe/Jersey';
    public const TIMEZONE_EUROPE_KALININGRAD = 'Europe/Kaliningrad';
    public const TIMEZONE_EUROPE_KIROV = 'Europe/Kirov';
    public const TIMEZONE_EUROPE_KYIV = 'Europe/Kyiv';
    public const TIMEZONE_EUROPE_LISBON = 'Europe/Lisbon';
    public const TIMEZONE_EUROPE_LJUBLJANA = 'Europe/Ljubljana';
    public const TIMEZONE_EUROPE_LONDON = 'Europe/London';
    public const TIMEZONE_EUROPE_LUXEMBOURG = 'Europe/Luxembourg';
    public const TIMEZONE_EUROPE_MADRID = 'Europe/Madrid';
    public const TIMEZONE_EUROPE_MALTA = 'Europe/Malta';
    public const TIMEZONE_EUROPE_MARIEHAMN = 'Europe/Mariehamn';
    public const TIMEZONE_EUROPE_MINSK = 'Europe/Minsk';
    public const TIMEZONE_EUROPE_MONACO = 'Europe/Monaco';
    public const TIMEZONE_EUROPE_MOSCOW = 'Europe/Moscow';
    public const TIMEZONE_EUROPE_OSLO = 'Europe/Oslo';
    public const TIMEZONE_EUROPE_PARIS = 'Europe/Paris';
    public const TIMEZONE_EUROPE_PODGORICA = 'Europe/Podgorica';
    public const TIMEZONE_EUROPE_PRAGUE = 'Europe/Prague';
    public const TIMEZONE_EUROPE_RIGA = 'Europe/Riga';
    public const TIMEZONE_EUROPE_ROME = 'Europe/Rome';
    public const TIMEZONE_EUROPE_SAMARA = 'Europe/Samara';
    public const TIMEZONE_EUROPE_SAN_MARINO = 'Europe/San_Marino';
    public const TIMEZONE_EUROPE_SARAJEVO = 'Europe/Sarajevo';
    public const TIMEZONE_EUROPE_SARATOV = 'Europe/Saratov';
    public const TIMEZONE_EUROPE_SIMFEROPOL = 'Europe/Simferopol';
    public const TIMEZONE_EUROPE_SKOPJE = 'Europe/Skopje';
    public const TIMEZONE_EUROPE_SOFIA = 'Europe/Sofia';
    public const TIMEZONE_EUROPE_STOCKHOLM = 'Europe/Stockholm';
    public const TIMEZONE_EUROPE_TALLINN = 'Europe/Tallinn';
    public const TIMEZONE_EUROPE_TIRANE = 'Europe/Tirane';
    public const TIMEZONE_EUROPE_ULYANOVSK = 'Europe/Ulyanovsk';
    public const TIMEZONE_EUROPE_VADUZ = 'Europe/Vaduz';
    public const TIMEZONE_EUROPE_VATICAN = 'Europe/Vatican';
    public const TIMEZONE_EUROPE_VIENNA = 'Europe/Vienna';
    public const TIMEZONE_EUROPE_VILNIUS = 'Europe/Vilnius';
    public const TIMEZONE_EUROPE_VOLGOGRAD = 'Europe/Volgograd';
    public const TIMEZONE_EUROPE_WARSAW = 'Europe/Warsaw';
    public const TIMEZONE_EUROPE_ZAGREB = 'Europe/Zagreb';
    public const TIMEZONE_EUROPE_ZURICH = 'Europe/Zurich';
    public const TIMEZONE_GMT = 'GMT';
    public const TIMEZONE_INDIAN_ANTANANARIVO = 'Indian/Antananarivo';
    public const TIMEZONE_INDIAN_CHAGOS = 'Indian/Chagos';
    public const TIMEZONE_INDIAN_CHRISTMAS = 'Indian/Christmas';
    public const TIMEZONE_INDIAN_COCOS = 'Indian/Cocos';
    public const TIMEZONE_INDIAN_COMORO = 'Indian/Comoro';
    public const TIMEZONE_INDIAN_KERGUELEN = 'Indian/Kerguelen';
    public const TIMEZONE_INDIAN_MAHE = 'Indian/Mahe';
    public const TIMEZONE_INDIAN_MALDIVES = 'Indian/Maldives';
    public const TIMEZONE_INDIAN_MAURITIUS = 'Indian/Mauritius';
    public const TIMEZONE_INDIAN_MAYOTTE = 'Indian/Mayotte';
    public const TIMEZONE_INDIAN_REUNION = 'Indian/Reunion';
    public const TIMEZONE_PACIFIC_APIA = 'Pacific/Apia';
    public const TIMEZONE_PACIFIC_AUCKLAND = 'Pacific/Auckland';
    public const TIMEZONE_PACIFIC_BOUGAINVILLE = 'Pacific/Bougainville';
    public const TIMEZONE_PACIFIC_CHATHAM = 'Pacific/Chatham';
    public const TIMEZONE_PACIFIC_CHUUK = 'Pacific/Chuuk';
    public const TIMEZONE_PACIFIC_EASTER = 'Pacific/Easter';
    public const TIMEZONE_PACIFIC_EFATE = 'Pacific/Efate';
    public const TIMEZONE_PACIFIC_FAKAOFO = 'Pacific/Fakaofo';
    public const TIMEZONE_PACIFIC_FIJI = 'Pacific/Fiji';
    public const TIMEZONE_PACIFIC_FUNAFUTI = 'Pacific/Funafuti';
    public const TIMEZONE_PACIFIC_GALAPAGOS = 'Pacific/Galapagos';
    public const TIMEZONE_PACIFIC_GAMBIER = 'Pacific/Gambier';
    public const TIMEZONE_PACIFIC_GUADALCANAL = 'Pacific/Guadalcanal';
    public const TIMEZONE_PACIFIC_GUAM = 'Pacific/Guam';
    public const TIMEZONE_PACIFIC_HONOLULU = 'Pacific/Honolulu';
    public const TIMEZONE_PACIFIC_KANTON = 'Pacific/Kanton';
    public const TIMEZONE_PACIFIC_KIRITIMATI = 'Pacific/Kiritimati';
    public const TIMEZONE_PACIFIC_KOSRAE = 'Pacific/Kosrae';
    public const TIMEZONE_PACIFIC_KWAJALEIN = 'Pacific/Kwajalein';
    public const TIMEZONE_PACIFIC_MAJURO = 'Pacific/Majuro';
    public const TIMEZONE_PACIFIC_MARQUESAS = 'Pacific/Marquesas';
    public const TIMEZONE_PACIFIC_MIDWAY = 'Pacific/Midway';
    public const TIMEZONE_PACIFIC_NAURU = 'Pacific/Nauru';
    public const TIMEZONE_PACIFIC_NIUE = 'Pacific/Niue';
    public const TIMEZONE_PACIFIC_NORFOLK = 'Pacific/Norfolk';
    public const TIMEZONE_PACIFIC_NOUMEA = 'Pacific/Noumea';
    public const TIMEZONE_PACIFIC_PAGO_PAGO = 'Pacific/Pago_Pago';
    public const TIMEZONE_PACIFIC_PALAU = 'Pacific/Palau';
    public const TIMEZONE_PACIFIC_PITCAIRN = 'Pacific/Pitcairn';
    public const TIMEZONE_PACIFIC_POHNPEI = 'Pacific/Pohnpei';
    public const TIMEZONE_PACIFIC_PORT_MORESBY = 'Pacific/Port_Moresby';
    public const TIMEZONE_PACIFIC_RAROTONGA = 'Pacific/Rarotonga';
    public const TIMEZONE_PACIFIC_SAIPAN = 'Pacific/Saipan';
    public const TIMEZONE_PACIFIC_TAHITI = 'Pacific/Tahiti';
    public const TIMEZONE_PACIFIC_TARAWA = 'Pacific/Tarawa';
    public const TIMEZONE_PACIFIC_TONGATAPU = 'Pacific/Tongatapu';
    public const TIMEZONE_PACIFIC_WAKE = 'Pacific/Wake';
    public const TIMEZONE_PACIFIC_WALLIS = 'Pacific/Wallis';
    public const TIMEZONE_US_ALASKA = 'US/Alaska';
    public const TIMEZONE_US_ARIZONA = 'US/Arizona';
    public const TIMEZONE_US_CENTRAL = 'US/Central';
    public const TIMEZONE_US_EASTERN = 'US/Eastern';
    public const TIMEZONE_US_HAWAII = 'US/Hawaii';
    public const TIMEZONE_US_MOUNTAIN = 'US/Mountain';
    public const TIMEZONE_US_PACIFIC = 'US/Pacific';
    public const TIMEZONE_UTC = 'UTC';
    public const TIMEZONE_PROFILE = 'profile';
    public const DELAY_UNTIL_WEEKDAYS_FRIDAY = 'friday';
    public const DELAY_UNTIL_WEEKDAYS_MONDAY = 'monday';
    public const DELAY_UNTIL_WEEKDAYS_SATURDAY = 'saturday';
    public const DELAY_UNTIL_WEEKDAYS_SUNDAY = 'sunday';
    public const DELAY_UNTIL_WEEKDAYS_THURSDAY = 'thursday';
    public const DELAY_UNTIL_WEEKDAYS_TUESDAY = 'tuesday';
    public const DELAY_UNTIL_WEEKDAYS_WEDNESDAY = 'wednesday';

    /**
     * Gets allowable values of the enum
     *
     * @return string[]
     */
    public function getUnitAllowableValues()
    {
        return [
            self::UNIT_DAYS,
            self::UNIT_HOURS,
            self::UNIT_MINUTES,
        ];
    }

    /**
     * Gets allowable values of the enum
     *
     * @return string[]
     */
    public function getTimezoneAllowableValues()
    {
        return [
            self::TIMEZONE_AFRICA_ABIDJAN,
            self::TIMEZONE_AFRICA_ACCRA,
            self::TIMEZONE_AFRICA_ADDIS_ABABA,
            self::TIMEZONE_AFRICA_ALGIERS,
            self::TIMEZONE_AFRICA_ASMARA,
            self::TIMEZONE_AFRICA_BAMAKO,
            self::TIMEZONE_AFRICA_BANGUI,
            self::TIMEZONE_AFRICA_BANJUL,
            self::TIMEZONE_AFRICA_BISSAU,
            self::TIMEZONE_AFRICA_BLANTYRE,
            self::TIMEZONE_AFRICA_BRAZZAVILLE,
            self::TIMEZONE_AFRICA_BUJUMBURA,
            self::TIMEZONE_AFRICA_CAIRO,
            self::TIMEZONE_AFRICA_CASABLANCA,
            self::TIMEZONE_AFRICA_CEUTA,
            self::TIMEZONE_AFRICA_CONAKRY,
            self::TIMEZONE_AFRICA_DAKAR,
            self::TIMEZONE_AFRICA_DAR_ES_SALAAM,
            self::TIMEZONE_AFRICA_DJIBOUTI,
            self::TIMEZONE_AFRICA_DOUALA,
            self::TIMEZONE_AFRICA_EL_AAIUN,
            self::TIMEZONE_AFRICA_FREETOWN,
            self::TIMEZONE_AFRICA_GABORONE,
            self::TIMEZONE_AFRICA_HARARE,
            self::TIMEZONE_AFRICA_JOHANNESBURG,
            self::TIMEZONE_AFRICA_JUBA,
            self::TIMEZONE_AFRICA_KAMPALA,
            self::TIMEZONE_AFRICA_KHARTOUM,
            self::TIMEZONE_AFRICA_KIGALI,
            self::TIMEZONE_AFRICA_KINSHASA,
            self::TIMEZONE_AFRICA_LAGOS,
            self::TIMEZONE_AFRICA_LIBREVILLE,
            self::TIMEZONE_AFRICA_LOME,
            self::TIMEZONE_AFRICA_LUANDA,
            self::TIMEZONE_AFRICA_LUBUMBASHI,
            self::TIMEZONE_AFRICA_LUSAKA,
            self::TIMEZONE_AFRICA_MALABO,
            self::TIMEZONE_AFRICA_MAPUTO,
            self::TIMEZONE_AFRICA_MASERU,
            self::TIMEZONE_AFRICA_MBABANE,
            self::TIMEZONE_AFRICA_MOGADISHU,
            self::TIMEZONE_AFRICA_MONROVIA,
            self::TIMEZONE_AFRICA_NAIROBI,
            self::TIMEZONE_AFRICA_NDJAMENA,
            self::TIMEZONE_AFRICA_NIAMEY,
            self::TIMEZONE_AFRICA_NOUAKCHOTT,
            self::TIMEZONE_AFRICA_OUAGADOUGOU,
            self::TIMEZONE_AFRICA_PORTO_NOVO,
            self::TIMEZONE_AFRICA_SAO_TOME,
            self::TIMEZONE_AFRICA_TRIPOLI,
            self::TIMEZONE_AFRICA_TUNIS,
            self::TIMEZONE_AFRICA_WINDHOEK,
            self::TIMEZONE_AMERICA_ADAK,
            self::TIMEZONE_AMERICA_ANCHORAGE,
            self::TIMEZONE_AMERICA_ANGUILLA,
            self::TIMEZONE_AMERICA_ANTIGUA,
            self::TIMEZONE_AMERICA_ARAGUAINA,
            self::TIMEZONE_AMERICA_ARGENTINA_BUENOS_AIRES,
            self::TIMEZONE_AMERICA_ARGENTINA_CATAMARCA,
            self::TIMEZONE_AMERICA_ARGENTINA_CORDOBA,
            self::TIMEZONE_AMERICA_ARGENTINA_JUJUY,
            self::TIMEZONE_AMERICA_ARGENTINA_LA_RIOJA,
            self::TIMEZONE_AMERICA_ARGENTINA_MENDOZA,
            self::TIMEZONE_AMERICA_ARGENTINA_RIO_GALLEGOS,
            self::TIMEZONE_AMERICA_ARGENTINA_SALTA,
            self::TIMEZONE_AMERICA_ARGENTINA_SAN_JUAN,
            self::TIMEZONE_AMERICA_ARGENTINA_SAN_LUIS,
            self::TIMEZONE_AMERICA_ARGENTINA_TUCUMAN,
            self::TIMEZONE_AMERICA_ARGENTINA_USHUAIA,
            self::TIMEZONE_AMERICA_ARUBA,
            self::TIMEZONE_AMERICA_ASUNCION,
            self::TIMEZONE_AMERICA_ATIKOKAN,
            self::TIMEZONE_AMERICA_BAHIA,
            self::TIMEZONE_AMERICA_BAHIA_BANDERAS,
            self::TIMEZONE_AMERICA_BARBADOS,
            self::TIMEZONE_AMERICA_BELEM,
            self::TIMEZONE_AMERICA_BELIZE,
            self::TIMEZONE_AMERICA_BLANC_SABLON,
            self::TIMEZONE_AMERICA_BOA_VISTA,
            self::TIMEZONE_AMERICA_BOGOTA,
            self::TIMEZONE_AMERICA_BOISE,
            self::TIMEZONE_AMERICA_CAMBRIDGE_BAY,
            self::TIMEZONE_AMERICA_CAMPO_GRANDE,
            self::TIMEZONE_AMERICA_CANCUN,
            self::TIMEZONE_AMERICA_CARACAS,
            self::TIMEZONE_AMERICA_CAYENNE,
            self::TIMEZONE_AMERICA_CAYMAN,
            self::TIMEZONE_AMERICA_CHICAGO,
            self::TIMEZONE_AMERICA_CHIHUAHUA,
            self::TIMEZONE_AMERICA_CIUDAD_JUAREZ,
            self::TIMEZONE_AMERICA_COSTA_RICA,
            self::TIMEZONE_AMERICA_CRESTON,
            self::TIMEZONE_AMERICA_CUIABA,
            self::TIMEZONE_AMERICA_CURACAO,
            self::TIMEZONE_AMERICA_DANMARKSHAVN,
            self::TIMEZONE_AMERICA_DAWSON,
            self::TIMEZONE_AMERICA_DAWSON_CREEK,
            self::TIMEZONE_AMERICA_DENVER,
            self::TIMEZONE_AMERICA_DETROIT,
            self::TIMEZONE_AMERICA_DOMINICA,
            self::TIMEZONE_AMERICA_EDMONTON,
            self::TIMEZONE_AMERICA_EIRUNEPE,
            self::TIMEZONE_AMERICA_EL_SALVADOR,
            self::TIMEZONE_AMERICA_FORT_NELSON,
            self::TIMEZONE_AMERICA_FORTALEZA,
            self::TIMEZONE_AMERICA_GLACE_BAY,
            self::TIMEZONE_AMERICA_GOOSE_BAY,
            self::TIMEZONE_AMERICA_GRAND_TURK,
            self::TIMEZONE_AMERICA_GRENADA,
            self::TIMEZONE_AMERICA_GUADELOUPE,
            self::TIMEZONE_AMERICA_GUATEMALA,
            self::TIMEZONE_AMERICA_GUAYAQUIL,
            self::TIMEZONE_AMERICA_GUYANA,
            self::TIMEZONE_AMERICA_HALIFAX,
            self::TIMEZONE_AMERICA_HAVANA,
            self::TIMEZONE_AMERICA_HERMOSILLO,
            self::TIMEZONE_AMERICA_INDIANA_INDIANAPOLIS,
            self::TIMEZONE_AMERICA_INDIANA_KNOX,
            self::TIMEZONE_AMERICA_INDIANA_MARENGO,
            self::TIMEZONE_AMERICA_INDIANA_PETERSBURG,
            self::TIMEZONE_AMERICA_INDIANA_TELL_CITY,
            self::TIMEZONE_AMERICA_INDIANA_VEVAY,
            self::TIMEZONE_AMERICA_INDIANA_VINCENNES,
            self::TIMEZONE_AMERICA_INDIANA_WINAMAC,
            self::TIMEZONE_AMERICA_INUVIK,
            self::TIMEZONE_AMERICA_IQALUIT,
            self::TIMEZONE_AMERICA_JAMAICA,
            self::TIMEZONE_AMERICA_JUNEAU,
            self::TIMEZONE_AMERICA_KENTUCKY_LOUISVILLE,
            self::TIMEZONE_AMERICA_KENTUCKY_MONTICELLO,
            self::TIMEZONE_AMERICA_KRALENDIJK,
            self::TIMEZONE_AMERICA_LA_PAZ,
            self::TIMEZONE_AMERICA_LIMA,
            self::TIMEZONE_AMERICA_LOS_ANGELES,
            self::TIMEZONE_AMERICA_LOWER_PRINCES,
            self::TIMEZONE_AMERICA_MACEIO,
            self::TIMEZONE_AMERICA_MANAGUA,
            self::TIMEZONE_AMERICA_MANAUS,
            self::TIMEZONE_AMERICA_MARIGOT,
            self::TIMEZONE_AMERICA_MARTINIQUE,
            self::TIMEZONE_AMERICA_MATAMOROS,
            self::TIMEZONE_AMERICA_MAZATLAN,
            self::TIMEZONE_AMERICA_MENOMINEE,
            self::TIMEZONE_AMERICA_MERIDA,
            self::TIMEZONE_AMERICA_METLAKATLA,
            self::TIMEZONE_AMERICA_MEXICO_CITY,
            self::TIMEZONE_AMERICA_MIQUELON,
            self::TIMEZONE_AMERICA_MONCTON,
            self::TIMEZONE_AMERICA_MONTERREY,
            self::TIMEZONE_AMERICA_MONTEVIDEO,
            self::TIMEZONE_AMERICA_MONTSERRAT,
            self::TIMEZONE_AMERICA_NASSAU,
            self::TIMEZONE_AMERICA_NEW_YORK,
            self::TIMEZONE_AMERICA_NOME,
            self::TIMEZONE_AMERICA_NORONHA,
            self::TIMEZONE_AMERICA_NORTH_DAKOTA_BEULAH,
            self::TIMEZONE_AMERICA_NORTH_DAKOTA_CENTER,
            self::TIMEZONE_AMERICA_NORTH_DAKOTA_NEW_SALEM,
            self::TIMEZONE_AMERICA_NUUK,
            self::TIMEZONE_AMERICA_OJINAGA,
            self::TIMEZONE_AMERICA_PANAMA,
            self::TIMEZONE_AMERICA_PARAMARIBO,
            self::TIMEZONE_AMERICA_PHOENIX,
            self::TIMEZONE_AMERICA_PORT_AU_PRINCE,
            self::TIMEZONE_AMERICA_PORT_OF_SPAIN,
            self::TIMEZONE_AMERICA_PORTO_VELHO,
            self::TIMEZONE_AMERICA_PUERTO_RICO,
            self::TIMEZONE_AMERICA_PUNTA_ARENAS,
            self::TIMEZONE_AMERICA_RANKIN_INLET,
            self::TIMEZONE_AMERICA_RECIFE,
            self::TIMEZONE_AMERICA_REGINA,
            self::TIMEZONE_AMERICA_RESOLUTE,
            self::TIMEZONE_AMERICA_RIO_BRANCO,
            self::TIMEZONE_AMERICA_SANTAREM,
            self::TIMEZONE_AMERICA_SANTIAGO,
            self::TIMEZONE_AMERICA_SANTO_DOMINGO,
            self::TIMEZONE_AMERICA_SAO_PAULO,
            self::TIMEZONE_AMERICA_SCORESBYSUND,
            self::TIMEZONE_AMERICA_SITKA,
            self::TIMEZONE_AMERICA_ST_BARTHELEMY,
            self::TIMEZONE_AMERICA_ST_JOHNS,
            self::TIMEZONE_AMERICA_ST_KITTS,
            self::TIMEZONE_AMERICA_ST_LUCIA,
            self::TIMEZONE_AMERICA_ST_THOMAS,
            self::TIMEZONE_AMERICA_ST_VINCENT,
            self::TIMEZONE_AMERICA_SWIFT_CURRENT,
            self::TIMEZONE_AMERICA_TEGUCIGALPA,
            self::TIMEZONE_AMERICA_THULE,
            self::TIMEZONE_AMERICA_TIJUANA,
            self::TIMEZONE_AMERICA_TORONTO,
            self::TIMEZONE_AMERICA_TORTOLA,
            self::TIMEZONE_AMERICA_VANCOUVER,
            self::TIMEZONE_AMERICA_WHITEHORSE,
            self::TIMEZONE_AMERICA_WINNIPEG,
            self::TIMEZONE_AMERICA_YAKUTAT,
            self::TIMEZONE_ANTARCTICA_CASEY,
            self::TIMEZONE_ANTARCTICA_DAVIS,
            self::TIMEZONE_ANTARCTICA_DUMONT_D_URVILLE,
            self::TIMEZONE_ANTARCTICA_MACQUARIE,
            self::TIMEZONE_ANTARCTICA_MAWSON,
            self::TIMEZONE_ANTARCTICA_MC_MURDO,
            self::TIMEZONE_ANTARCTICA_PALMER,
            self::TIMEZONE_ANTARCTICA_ROTHERA,
            self::TIMEZONE_ANTARCTICA_SYOWA,
            self::TIMEZONE_ANTARCTICA_TROLL,
            self::TIMEZONE_ANTARCTICA_VOSTOK,
            self::TIMEZONE_ARCTIC_LONGYEARBYEN,
            self::TIMEZONE_ASIA_ADEN,
            self::TIMEZONE_ASIA_ALMATY,
            self::TIMEZONE_ASIA_AMMAN,
            self::TIMEZONE_ASIA_ANADYR,
            self::TIMEZONE_ASIA_AQTAU,
            self::TIMEZONE_ASIA_AQTOBE,
            self::TIMEZONE_ASIA_ASHGABAT,
            self::TIMEZONE_ASIA_ATYRAU,
            self::TIMEZONE_ASIA_BAGHDAD,
            self::TIMEZONE_ASIA_BAHRAIN,
            self::TIMEZONE_ASIA_BAKU,
            self::TIMEZONE_ASIA_BANGKOK,
            self::TIMEZONE_ASIA_BARNAUL,
            self::TIMEZONE_ASIA_BEIRUT,
            self::TIMEZONE_ASIA_BISHKEK,
            self::TIMEZONE_ASIA_BRUNEI,
            self::TIMEZONE_ASIA_CHITA,
            self::TIMEZONE_ASIA_CHOIBALSAN,
            self::TIMEZONE_ASIA_COLOMBO,
            self::TIMEZONE_ASIA_DAMASCUS,
            self::TIMEZONE_ASIA_DHAKA,
            self::TIMEZONE_ASIA_DILI,
            self::TIMEZONE_ASIA_DUBAI,
            self::TIMEZONE_ASIA_DUSHANBE,
            self::TIMEZONE_ASIA_FAMAGUSTA,
            self::TIMEZONE_ASIA_GAZA,
            self::TIMEZONE_ASIA_HEBRON,
            self::TIMEZONE_ASIA_HO_CHI_MINH,
            self::TIMEZONE_ASIA_HONG_KONG,
            self::TIMEZONE_ASIA_HOVD,
            self::TIMEZONE_ASIA_IRKUTSK,
            self::TIMEZONE_ASIA_JAKARTA,
            self::TIMEZONE_ASIA_JAYAPURA,
            self::TIMEZONE_ASIA_JERUSALEM,
            self::TIMEZONE_ASIA_KABUL,
            self::TIMEZONE_ASIA_KAMCHATKA,
            self::TIMEZONE_ASIA_KARACHI,
            self::TIMEZONE_ASIA_KATHMANDU,
            self::TIMEZONE_ASIA_KHANDYGA,
            self::TIMEZONE_ASIA_KOLKATA,
            self::TIMEZONE_ASIA_KRASNOYARSK,
            self::TIMEZONE_ASIA_KUALA_LUMPUR,
            self::TIMEZONE_ASIA_KUCHING,
            self::TIMEZONE_ASIA_KUWAIT,
            self::TIMEZONE_ASIA_MACAU,
            self::TIMEZONE_ASIA_MAGADAN,
            self::TIMEZONE_ASIA_MAKASSAR,
            self::TIMEZONE_ASIA_MANILA,
            self::TIMEZONE_ASIA_MUSCAT,
            self::TIMEZONE_ASIA_NICOSIA,
            self::TIMEZONE_ASIA_NOVOKUZNETSK,
            self::TIMEZONE_ASIA_NOVOSIBIRSK,
            self::TIMEZONE_ASIA_OMSK,
            self::TIMEZONE_ASIA_ORAL,
            self::TIMEZONE_ASIA_PHNOM_PENH,
            self::TIMEZONE_ASIA_PONTIANAK,
            self::TIMEZONE_ASIA_PYONGYANG,
            self::TIMEZONE_ASIA_QATAR,
            self::TIMEZONE_ASIA_QOSTANAY,
            self::TIMEZONE_ASIA_QYZYLORDA,
            self::TIMEZONE_ASIA_RIYADH,
            self::TIMEZONE_ASIA_SAKHALIN,
            self::TIMEZONE_ASIA_SAMARKAND,
            self::TIMEZONE_ASIA_SEOUL,
            self::TIMEZONE_ASIA_SHANGHAI,
            self::TIMEZONE_ASIA_SINGAPORE,
            self::TIMEZONE_ASIA_SREDNEKOLYMSK,
            self::TIMEZONE_ASIA_TAIPEI,
            self::TIMEZONE_ASIA_TASHKENT,
            self::TIMEZONE_ASIA_TBILISI,
            self::TIMEZONE_ASIA_TEHRAN,
            self::TIMEZONE_ASIA_THIMPHU,
            self::TIMEZONE_ASIA_TOKYO,
            self::TIMEZONE_ASIA_TOMSK,
            self::TIMEZONE_ASIA_ULAANBAATAR,
            self::TIMEZONE_ASIA_URUMQI,
            self::TIMEZONE_ASIA_UST_NERA,
            self::TIMEZONE_ASIA_VIENTIANE,
            self::TIMEZONE_ASIA_VLADIVOSTOK,
            self::TIMEZONE_ASIA_YAKUTSK,
            self::TIMEZONE_ASIA_YANGON,
            self::TIMEZONE_ASIA_YEKATERINBURG,
            self::TIMEZONE_ASIA_YEREVAN,
            self::TIMEZONE_ATLANTIC_AZORES,
            self::TIMEZONE_ATLANTIC_BERMUDA,
            self::TIMEZONE_ATLANTIC_CANARY,
            self::TIMEZONE_ATLANTIC_CAPE_VERDE,
            self::TIMEZONE_ATLANTIC_FAROE,
            self::TIMEZONE_ATLANTIC_MADEIRA,
            self::TIMEZONE_ATLANTIC_REYKJAVIK,
            self::TIMEZONE_ATLANTIC_SOUTH_GEORGIA,
            self::TIMEZONE_ATLANTIC_ST_HELENA,
            self::TIMEZONE_ATLANTIC_STANLEY,
            self::TIMEZONE_AUSTRALIA_ADELAIDE,
            self::TIMEZONE_AUSTRALIA_BRISBANE,
            self::TIMEZONE_AUSTRALIA_BROKEN_HILL,
            self::TIMEZONE_AUSTRALIA_DARWIN,
            self::TIMEZONE_AUSTRALIA_EUCLA,
            self::TIMEZONE_AUSTRALIA_HOBART,
            self::TIMEZONE_AUSTRALIA_LINDEMAN,
            self::TIMEZONE_AUSTRALIA_LORD_HOWE,
            self::TIMEZONE_AUSTRALIA_MELBOURNE,
            self::TIMEZONE_AUSTRALIA_PERTH,
            self::TIMEZONE_AUSTRALIA_SYDNEY,
            self::TIMEZONE_CANADA_ATLANTIC,
            self::TIMEZONE_CANADA_CENTRAL,
            self::TIMEZONE_CANADA_EASTERN,
            self::TIMEZONE_CANADA_MOUNTAIN,
            self::TIMEZONE_CANADA_NEWFOUNDLAND,
            self::TIMEZONE_CANADA_PACIFIC,
            self::TIMEZONE_EUROPE_AMSTERDAM,
            self::TIMEZONE_EUROPE_ANDORRA,
            self::TIMEZONE_EUROPE_ASTRAKHAN,
            self::TIMEZONE_EUROPE_ATHENS,
            self::TIMEZONE_EUROPE_BELGRADE,
            self::TIMEZONE_EUROPE_BERLIN,
            self::TIMEZONE_EUROPE_BRATISLAVA,
            self::TIMEZONE_EUROPE_BRUSSELS,
            self::TIMEZONE_EUROPE_BUCHAREST,
            self::TIMEZONE_EUROPE_BUDAPEST,
            self::TIMEZONE_EUROPE_BUSINGEN,
            self::TIMEZONE_EUROPE_CHISINAU,
            self::TIMEZONE_EUROPE_COPENHAGEN,
            self::TIMEZONE_EUROPE_DUBLIN,
            self::TIMEZONE_EUROPE_GIBRALTAR,
            self::TIMEZONE_EUROPE_GUERNSEY,
            self::TIMEZONE_EUROPE_HELSINKI,
            self::TIMEZONE_EUROPE_ISLE_OF_MAN,
            self::TIMEZONE_EUROPE_ISTANBUL,
            self::TIMEZONE_EUROPE_JERSEY,
            self::TIMEZONE_EUROPE_KALININGRAD,
            self::TIMEZONE_EUROPE_KIROV,
            self::TIMEZONE_EUROPE_KYIV,
            self::TIMEZONE_EUROPE_LISBON,
            self::TIMEZONE_EUROPE_LJUBLJANA,
            self::TIMEZONE_EUROPE_LONDON,
            self::TIMEZONE_EUROPE_LUXEMBOURG,
            self::TIMEZONE_EUROPE_MADRID,
            self::TIMEZONE_EUROPE_MALTA,
            self::TIMEZONE_EUROPE_MARIEHAMN,
            self::TIMEZONE_EUROPE_MINSK,
            self::TIMEZONE_EUROPE_MONACO,
            self::TIMEZONE_EUROPE_MOSCOW,
            self::TIMEZONE_EUROPE_OSLO,
            self::TIMEZONE_EUROPE_PARIS,
            self::TIMEZONE_EUROPE_PODGORICA,
            self::TIMEZONE_EUROPE_PRAGUE,
            self::TIMEZONE_EUROPE_RIGA,
            self::TIMEZONE_EUROPE_ROME,
            self::TIMEZONE_EUROPE_SAMARA,
            self::TIMEZONE_EUROPE_SAN_MARINO,
            self::TIMEZONE_EUROPE_SARAJEVO,
            self::TIMEZONE_EUROPE_SARATOV,
            self::TIMEZONE_EUROPE_SIMFEROPOL,
            self::TIMEZONE_EUROPE_SKOPJE,
            self::TIMEZONE_EUROPE_SOFIA,
            self::TIMEZONE_EUROPE_STOCKHOLM,
            self::TIMEZONE_EUROPE_TALLINN,
            self::TIMEZONE_EUROPE_TIRANE,
            self::TIMEZONE_EUROPE_ULYANOVSK,
            self::TIMEZONE_EUROPE_VADUZ,
            self::TIMEZONE_EUROPE_VATICAN,
            self::TIMEZONE_EUROPE_VIENNA,
            self::TIMEZONE_EUROPE_VILNIUS,
            self::TIMEZONE_EUROPE_VOLGOGRAD,
            self::TIMEZONE_EUROPE_WARSAW,
            self::TIMEZONE_EUROPE_ZAGREB,
            self::TIMEZONE_EUROPE_ZURICH,
            self::TIMEZONE_GMT,
            self::TIMEZONE_INDIAN_ANTANANARIVO,
            self::TIMEZONE_INDIAN_CHAGOS,
            self::TIMEZONE_INDIAN_CHRISTMAS,
            self::TIMEZONE_INDIAN_COCOS,
            self::TIMEZONE_INDIAN_COMORO,
            self::TIMEZONE_INDIAN_KERGUELEN,
            self::TIMEZONE_INDIAN_MAHE,
            self::TIMEZONE_INDIAN_MALDIVES,
            self::TIMEZONE_INDIAN_MAURITIUS,
            self::TIMEZONE_INDIAN_MAYOTTE,
            self::TIMEZONE_INDIAN_REUNION,
            self::TIMEZONE_PACIFIC_APIA,
            self::TIMEZONE_PACIFIC_AUCKLAND,
            self::TIMEZONE_PACIFIC_BOUGAINVILLE,
            self::TIMEZONE_PACIFIC_CHATHAM,
            self::TIMEZONE_PACIFIC_CHUUK,
            self::TIMEZONE_PACIFIC_EASTER,
            self::TIMEZONE_PACIFIC_EFATE,
            self::TIMEZONE_PACIFIC_FAKAOFO,
            self::TIMEZONE_PACIFIC_FIJI,
            self::TIMEZONE_PACIFIC_FUNAFUTI,
            self::TIMEZONE_PACIFIC_GALAPAGOS,
            self::TIMEZONE_PACIFIC_GAMBIER,
            self::TIMEZONE_PACIFIC_GUADALCANAL,
            self::TIMEZONE_PACIFIC_GUAM,
            self::TIMEZONE_PACIFIC_HONOLULU,
            self::TIMEZONE_PACIFIC_KANTON,
            self::TIMEZONE_PACIFIC_KIRITIMATI,
            self::TIMEZONE_PACIFIC_KOSRAE,
            self::TIMEZONE_PACIFIC_KWAJALEIN,
            self::TIMEZONE_PACIFIC_MAJURO,
            self::TIMEZONE_PACIFIC_MARQUESAS,
            self::TIMEZONE_PACIFIC_MIDWAY,
            self::TIMEZONE_PACIFIC_NAURU,
            self::TIMEZONE_PACIFIC_NIUE,
            self::TIMEZONE_PACIFIC_NORFOLK,
            self::TIMEZONE_PACIFIC_NOUMEA,
            self::TIMEZONE_PACIFIC_PAGO_PAGO,
            self::TIMEZONE_PACIFIC_PALAU,
            self::TIMEZONE_PACIFIC_PITCAIRN,
            self::TIMEZONE_PACIFIC_POHNPEI,
            self::TIMEZONE_PACIFIC_PORT_MORESBY,
            self::TIMEZONE_PACIFIC_RAROTONGA,
            self::TIMEZONE_PACIFIC_SAIPAN,
            self::TIMEZONE_PACIFIC_TAHITI,
            self::TIMEZONE_PACIFIC_TARAWA,
            self::TIMEZONE_PACIFIC_TONGATAPU,
            self::TIMEZONE_PACIFIC_WAKE,
            self::TIMEZONE_PACIFIC_WALLIS,
            self::TIMEZONE_US_ALASKA,
            self::TIMEZONE_US_ARIZONA,
            self::TIMEZONE_US_CENTRAL,
            self::TIMEZONE_US_EASTERN,
            self::TIMEZONE_US_HAWAII,
            self::TIMEZONE_US_MOUNTAIN,
            self::TIMEZONE_US_PACIFIC,
            self::TIMEZONE_UTC,
            self::TIMEZONE_PROFILE,
        ];
    }

    /**
     * Gets allowable values of the enum
     *
     * @return string[]
     */
    public function getDelayUntilWeekdaysAllowableValues()
    {
        return [
            self::DELAY_UNTIL_WEEKDAYS_FRIDAY,
            self::DELAY_UNTIL_WEEKDAYS_MONDAY,
            self::DELAY_UNTIL_WEEKDAYS_SATURDAY,
            self::DELAY_UNTIL_WEEKDAYS_SUNDAY,
            self::DELAY_UNTIL_WEEKDAYS_THURSDAY,
            self::DELAY_UNTIL_WEEKDAYS_TUESDAY,
            self::DELAY_UNTIL_WEEKDAYS_WEDNESDAY,
        ];
    }

    /**
     * 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->setIfExists('unit', $data ?? [], 'days');
        $this->setIfExists('value', $data ?? [], null);
        $this->setIfExists('secondary_value', $data ?? [], null);
        $this->setIfExists('timezone', $data ?? [], 'profile');
        $this->setIfExists('delay_until_time', $data ?? [], null);
        $this->setIfExists('delay_until_weekdays', $data ?? [], null);
    }

    /**
    * Sets $this->container[$variableName] to the given data or to the given default Value; if $variableName
    * is nullable and its value is set to null in the $fields array, then mark it as "set to null" in the
    * $this->openAPINullablesSetToNull array
    *
    * @param string $variableName
    * @param array  $fields
    * @param mixed  $defaultValue
    */
    private function setIfExists(string $variableName, array $fields, $defaultValue): void
    {
        if (self::isNullable($variableName) && array_key_exists($variableName, $fields) && is_null($fields[$variableName])) {
            $this->openAPINullablesSetToNull[] = $variableName;
        }

        $this->container[$variableName] = $fields[$variableName] ?? $defaultValue;
    }

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

        $allowedValues = $this->getUnitAllowableValues();
        if (!is_null($this->container['unit']) && !in_array($this->container['unit'], $allowedValues, true)) {
            $invalidProperties[] = sprintf(
                "invalid value '%s' for 'unit', must be one of '%s'",
                $this->container['unit'],
                implode("', '", $allowedValues)
            );
        }

        if ($this->container['value'] === null) {
            $invalidProperties[] = "'value' can't be null";
        }
        $allowedValues = $this->getTimezoneAllowableValues();
        if (!is_null($this->container['timezone']) && !in_array($this->container['timezone'], $allowedValues, true)) {
            $invalidProperties[] = sprintf(
                "invalid value '%s' for 'timezone', must be one of '%s'",
                $this->container['timezone'],
                implode("', '", $allowedValues)
            );
        }

        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 unit
     *
     * @return string|null
     */
    public function getUnit()
    {
        return $this->container['unit'];
    }

    /**
     * Sets unit
     *
     * @param string|null $unit aka delay_units in app.
     *
     * @return self
     */
    public function setUnit($unit)
    {
        $allowedValues = $this->getUnitAllowableValues();
        if (!is_null($unit) && !in_array($unit, $allowedValues, true)) {
            throw new \InvalidArgumentException(
                sprintf(
                    "Invalid value '%s' for 'unit', must be one of '%s'",
                    $unit,
                    implode("', '", $allowedValues)
                )
            );
        }

        if (is_null($unit)) {
            throw new \InvalidArgumentException('non-nullable unit cannot be null');
        }

        $this->container['unit'] = $unit;

        return $this;
    }

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

    /**
     * Sets value
     *
     * @param int $value value
     *
     * @return self
     */
    public function setValue($value)
    {

        if (is_null($value)) {
            throw new \InvalidArgumentException('non-nullable value cannot be null');
        }

        $this->container['value'] = $value;

        return $this;
    }

    /**
     * Gets secondary_value
     *
     * @return int|null
     */
    public function getSecondaryValue()
    {
        return $this->container['secondary_value'];
    }

    /**
     * Sets secondary_value
     *
     * @param int|null $secondary_value secondary_value
     *
     * @return self
     */
    public function setSecondaryValue($secondary_value)
    {

        if (is_null($secondary_value)) {
            array_push($this->openAPINullablesSetToNull, 'secondary_value');
        } else {
            $nullablesSetToNull = $this->getOpenAPINullablesSetToNull();
            $index = array_search('secondary_value', $nullablesSetToNull);
            if ($index !== FALSE) {
                unset($nullablesSetToNull[$index]);
                $this->setOpenAPINullablesSetToNull($nullablesSetToNull);
            }
        }

        $this->container['secondary_value'] = $secondary_value;

        return $this;
    }

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

    /**
     * Sets timezone
     *
     * @param string|null $timezone timezone
     *
     * @return self
     */
    public function setTimezone($timezone)
    {
        $allowedValues = $this->getTimezoneAllowableValues();
        if (!is_null($timezone) && !in_array($timezone, $allowedValues, true)) {
            throw new \InvalidArgumentException(
                sprintf(
                    "Invalid value '%s' for 'timezone', must be one of '%s'",
                    $timezone,
                    implode("', '", $allowedValues)
                )
            );
        }

        if (is_null($timezone)) {
            throw new \InvalidArgumentException('non-nullable timezone cannot be null');
        }

        $this->container['timezone'] = $timezone;

        return $this;
    }

    /**
     * Gets delay_until_time
     *
     * @return string|null
     */
    public function getDelayUntilTime()
    {
        return $this->container['delay_until_time'];
    }

    /**
     * Sets delay_until_time
     *
     * @param string|null $delay_until_time delay_until_time
     *
     * @return self
     */
    public function setDelayUntilTime($delay_until_time)
    {

        if (is_null($delay_until_time)) {
            array_push($this->openAPINullablesSetToNull, 'delay_until_time');
        } else {
            $nullablesSetToNull = $this->getOpenAPINullablesSetToNull();
            $index = array_search('delay_until_time', $nullablesSetToNull);
            if ($index !== FALSE) {
                unset($nullablesSetToNull[$index]);
                $this->setOpenAPINullablesSetToNull($nullablesSetToNull);
            }
        }

        $this->container['delay_until_time'] = $delay_until_time;

        return $this;
    }

    /**
     * Gets delay_until_weekdays
     *
     * @return string[]|null
     */
    public function getDelayUntilWeekdays()
    {
        return $this->container['delay_until_weekdays'];
    }

    /**
     * Sets delay_until_weekdays
     *
     * @param string[]|null $delay_until_weekdays delay_until_weekdays
     *
     * @return self
     */
    public function setDelayUntilWeekdays($delay_until_weekdays)
    {
        $allowedValues = $this->getDelayUntilWeekdaysAllowableValues();
        if (!is_null($delay_until_weekdays) && array_diff($delay_until_weekdays, $allowedValues)) {
            throw new \InvalidArgumentException(
                sprintf(
                    "Invalid value for 'delay_until_weekdays', must be one of '%s'",
                    implode("', '", $allowedValues)
                )
            );
        }

        if (is_null($delay_until_weekdays)) {
            array_push($this->openAPINullablesSetToNull, 'delay_until_weekdays');
        } else {
            $nullablesSetToNull = $this->getOpenAPINullablesSetToNull();
            $index = array_search('delay_until_weekdays', $nullablesSetToNull);
            if ($index !== FALSE) {
                unset($nullablesSetToNull[$index]);
                $this->setOpenAPINullablesSetToNull($nullablesSetToNull);
            }
        }

        $this->container['delay_until_weekdays'] = $delay_until_weekdays;

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

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

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

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

    /**
     * Serializes the object to a value that can be serialized natively by json_encode().
     * @link https://www.php.net/manual/en/jsonserializable.jsonserialize.php
     *
     * @return mixed Returns data which can be serialized by json_encode(), which is a value
     * of any type other than a resource.
     */
    #[\ReturnTypeWillChange]
    public function jsonSerialize()
    {
       return ObjectSerializer::sanitizeForSerialization($this);
    }

    /**
     * Gets the string presentation of the object
     *
     * @return string
     */
    public function __toString()
    {
        return json_encode(
            ObjectSerializer::sanitizeForSerialization($this),
            JSON_PRETTY_PRINT
        );
    }

    /**
     * Gets a header-safe presentation of the object
     *
     * @return string
     */
    public function toHeaderValue()
    {
        return json_encode(ObjectSerializer::sanitizeForSerialization($this));
    }
}


