<?php
/**
 * PublicEmail
 *
 * PHP version 7.4
 *
 * @category Class
 * @package  HubSpot\Client\Marketing\Emails
 * @author   OpenAPI Generator team
 * @link     https://openapi-generator.tech
 */

/**
 * Marketing Emails
 *
 * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
 *
 * The version of the OpenAPI document: v3
 * Generated by: https://openapi-generator.tech
 * Generator version: 7.12.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 HubSpot\Client\Marketing\Emails\Model;

use \ArrayAccess;
use \HubSpot\Client\Marketing\Emails\ObjectSerializer;

/**
 * PublicEmail Class Doc Comment
 *
 * @category Class
 * @description A marketing email
 * @package  HubSpot\Client\Marketing\Emails
 * @author   OpenAPI Generator team
 * @link     https://openapi-generator.tech
 * @implements \ArrayAccess<string, mixed>
 */
class PublicEmail implements ModelInterface, ArrayAccess, \JsonSerializable
{
    public const DISCRIMINATOR = null;

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

    /**
      * Array of property to type mappings. Used for (de)serialization
      *
      * @var string[]
      */
    protected static $openAPITypes = [
        'feedback_survey_id' => 'string',
        'subject' => 'string',
        'publish_date' => '\DateTime',
        'is_transactional' => 'bool',
        'language' => 'string',
        'type' => 'string',
        'content' => '\HubSpot\Client\Marketing\Emails\Model\PublicEmailContent',
        'business_unit_id' => 'string',
        'webversion' => '\HubSpot\Client\Marketing\Emails\Model\PublicWebversionDetails',
        'workflow_names' => 'string[]',
        'archived' => 'bool',
        'created_at' => '\DateTime',
        'stats' => '\HubSpot\Client\Marketing\Emails\Model\EmailStatisticsData',
        'jitter_send_time' => 'bool',
        'from' => '\HubSpot\Client\Marketing\Emails\Model\PublicEmailFromDetails',
        'id' => 'string',
        'state' => 'string',
        'created_by_id' => 'string',
        'updated_at' => '\DateTime',
        'rss_data' => '\HubSpot\Client\Marketing\Emails\Model\PublicRssEmailDetails',
        'published_at' => '\DateTime',
        'published_by_id' => 'string',
        'is_published' => 'bool',
        'testing' => '\HubSpot\Client\Marketing\Emails\Model\PublicEmailTestingDetails',
        'updated_by_id' => 'string',
        'folder_id' => 'int',
        'subscription_details' => '\HubSpot\Client\Marketing\Emails\Model\PublicEmailSubscriptionDetails',
        'deleted_at' => '\DateTime',
        'name' => 'string',
        'active_domain' => 'string',
        'campaign' => 'string',
        'to' => '\HubSpot\Client\Marketing\Emails\Model\PublicEmailToDetails',
        'subcategory' => 'string',
        'campaign_name' => 'string',
        'send_on_publish' => 'bool'
    ];

    /**
      * 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 = [
        'feedback_survey_id' => null,
        'subject' => null,
        'publish_date' => 'date-time',
        'is_transactional' => null,
        'language' => null,
        'type' => null,
        'content' => null,
        'business_unit_id' => null,
        'webversion' => null,
        'workflow_names' => null,
        'archived' => null,
        'created_at' => 'date-time',
        'stats' => null,
        'jitter_send_time' => null,
        'from' => null,
        'id' => null,
        'state' => null,
        'created_by_id' => null,
        'updated_at' => 'date-time',
        'rss_data' => null,
        'published_at' => 'date-time',
        'published_by_id' => null,
        'is_published' => null,
        'testing' => null,
        'updated_by_id' => null,
        'folder_id' => 'int64',
        'subscription_details' => null,
        'deleted_at' => 'date-time',
        'name' => null,
        'active_domain' => null,
        'campaign' => null,
        'to' => null,
        'subcategory' => null,
        'campaign_name' => null,
        'send_on_publish' => null
    ];

    /**
      * Array of nullable properties. Used for (de)serialization
      *
      * @var boolean[]
      */
    protected static array $openAPINullables = [
        'feedback_survey_id' => false,
        'subject' => false,
        'publish_date' => false,
        'is_transactional' => false,
        'language' => false,
        'type' => false,
        'content' => false,
        'business_unit_id' => false,
        'webversion' => false,
        'workflow_names' => false,
        'archived' => false,
        'created_at' => false,
        'stats' => false,
        'jitter_send_time' => false,
        'from' => false,
        'id' => false,
        'state' => false,
        'created_by_id' => false,
        'updated_at' => false,
        'rss_data' => false,
        'published_at' => false,
        'published_by_id' => false,
        'is_published' => false,
        'testing' => false,
        'updated_by_id' => false,
        'folder_id' => false,
        'subscription_details' => false,
        'deleted_at' => false,
        'name' => false,
        'active_domain' => false,
        'campaign' => false,
        'to' => false,
        'subcategory' => false,
        'campaign_name' => false,
        'send_on_publish' => false
    ];

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

    /**
     * Setter - Array of nullable field names deliberately set to null
     *
     * @param boolean[] $openAPINullablesSetToNull
     */
    private function setOpenAPINullablesSetToNull(array $openAPINullablesSetToNull): void
    {
        $this->openAPINullablesSetToNull = $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 = [
        'feedback_survey_id' => 'feedbackSurveyId',
        'subject' => 'subject',
        'publish_date' => 'publishDate',
        'is_transactional' => 'isTransactional',
        'language' => 'language',
        'type' => 'type',
        'content' => 'content',
        'business_unit_id' => 'businessUnitId',
        'webversion' => 'webversion',
        'workflow_names' => 'workflowNames',
        'archived' => 'archived',
        'created_at' => 'createdAt',
        'stats' => 'stats',
        'jitter_send_time' => 'jitterSendTime',
        'from' => 'from',
        'id' => 'id',
        'state' => 'state',
        'created_by_id' => 'createdById',
        'updated_at' => 'updatedAt',
        'rss_data' => 'rssData',
        'published_at' => 'publishedAt',
        'published_by_id' => 'publishedById',
        'is_published' => 'isPublished',
        'testing' => 'testing',
        'updated_by_id' => 'updatedById',
        'folder_id' => 'folderId',
        'subscription_details' => 'subscriptionDetails',
        'deleted_at' => 'deletedAt',
        'name' => 'name',
        'active_domain' => 'activeDomain',
        'campaign' => 'campaign',
        'to' => 'to',
        'subcategory' => 'subcategory',
        'campaign_name' => 'campaignName',
        'send_on_publish' => 'sendOnPublish'
    ];

    /**
     * Array of attributes to setter functions (for deserialization of responses)
     *
     * @var string[]
     */
    protected static $setters = [
        'feedback_survey_id' => 'setFeedbackSurveyId',
        'subject' => 'setSubject',
        'publish_date' => 'setPublishDate',
        'is_transactional' => 'setIsTransactional',
        'language' => 'setLanguage',
        'type' => 'setType',
        'content' => 'setContent',
        'business_unit_id' => 'setBusinessUnitId',
        'webversion' => 'setWebversion',
        'workflow_names' => 'setWorkflowNames',
        'archived' => 'setArchived',
        'created_at' => 'setCreatedAt',
        'stats' => 'setStats',
        'jitter_send_time' => 'setJitterSendTime',
        'from' => 'setFrom',
        'id' => 'setId',
        'state' => 'setState',
        'created_by_id' => 'setCreatedById',
        'updated_at' => 'setUpdatedAt',
        'rss_data' => 'setRssData',
        'published_at' => 'setPublishedAt',
        'published_by_id' => 'setPublishedById',
        'is_published' => 'setIsPublished',
        'testing' => 'setTesting',
        'updated_by_id' => 'setUpdatedById',
        'folder_id' => 'setFolderId',
        'subscription_details' => 'setSubscriptionDetails',
        'deleted_at' => 'setDeletedAt',
        'name' => 'setName',
        'active_domain' => 'setActiveDomain',
        'campaign' => 'setCampaign',
        'to' => 'setTo',
        'subcategory' => 'setSubcategory',
        'campaign_name' => 'setCampaignName',
        'send_on_publish' => 'setSendOnPublish'
    ];

    /**
     * Array of attributes to getter functions (for serialization of requests)
     *
     * @var string[]
     */
    protected static $getters = [
        'feedback_survey_id' => 'getFeedbackSurveyId',
        'subject' => 'getSubject',
        'publish_date' => 'getPublishDate',
        'is_transactional' => 'getIsTransactional',
        'language' => 'getLanguage',
        'type' => 'getType',
        'content' => 'getContent',
        'business_unit_id' => 'getBusinessUnitId',
        'webversion' => 'getWebversion',
        'workflow_names' => 'getWorkflowNames',
        'archived' => 'getArchived',
        'created_at' => 'getCreatedAt',
        'stats' => 'getStats',
        'jitter_send_time' => 'getJitterSendTime',
        'from' => 'getFrom',
        'id' => 'getId',
        'state' => 'getState',
        'created_by_id' => 'getCreatedById',
        'updated_at' => 'getUpdatedAt',
        'rss_data' => 'getRssData',
        'published_at' => 'getPublishedAt',
        'published_by_id' => 'getPublishedById',
        'is_published' => 'getIsPublished',
        'testing' => 'getTesting',
        'updated_by_id' => 'getUpdatedById',
        'folder_id' => 'getFolderId',
        'subscription_details' => 'getSubscriptionDetails',
        'deleted_at' => 'getDeletedAt',
        'name' => 'getName',
        'active_domain' => 'getActiveDomain',
        'campaign' => 'getCampaign',
        'to' => 'getTo',
        'subcategory' => 'getSubcategory',
        'campaign_name' => 'getCampaignName',
        'send_on_publish' => 'getSendOnPublish'
    ];

    /**
     * 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 LANGUAGE_AF = 'af';
    public const LANGUAGE_AF_NA = 'af-na';
    public const LANGUAGE_AF_ZA = 'af-za';
    public const LANGUAGE_AGQ = 'agq';
    public const LANGUAGE_AGQ_CM = 'agq-cm';
    public const LANGUAGE_AK = 'ak';
    public const LANGUAGE_AK_GH = 'ak-gh';
    public const LANGUAGE_AM = 'am';
    public const LANGUAGE_AM_ET = 'am-et';
    public const LANGUAGE_ANN = 'ann';
    public const LANGUAGE_ANN_NG = 'ann-ng';
    public const LANGUAGE_AR = 'ar';
    public const LANGUAGE_AR_001 = 'ar-001';
    public const LANGUAGE_AR_AE = 'ar-ae';
    public const LANGUAGE_AR_BH = 'ar-bh';
    public const LANGUAGE_AR_DJ = 'ar-dj';
    public const LANGUAGE_AR_DZ = 'ar-dz';
    public const LANGUAGE_AR_EG = 'ar-eg';
    public const LANGUAGE_AR_EH = 'ar-eh';
    public const LANGUAGE_AR_ER = 'ar-er';
    public const LANGUAGE_AR_IL = 'ar-il';
    public const LANGUAGE_AR_IQ = 'ar-iq';
    public const LANGUAGE_AR_JO = 'ar-jo';
    public const LANGUAGE_AR_KM = 'ar-km';
    public const LANGUAGE_AR_KW = 'ar-kw';
    public const LANGUAGE_AR_LB = 'ar-lb';
    public const LANGUAGE_AR_LY = 'ar-ly';
    public const LANGUAGE_AR_MA = 'ar-ma';
    public const LANGUAGE_AR_MR = 'ar-mr';
    public const LANGUAGE_AR_OM = 'ar-om';
    public const LANGUAGE_AR_PS = 'ar-ps';
    public const LANGUAGE_AR_QA = 'ar-qa';
    public const LANGUAGE_AR_SA = 'ar-sa';
    public const LANGUAGE_AR_SD = 'ar-sd';
    public const LANGUAGE_AR_SO = 'ar-so';
    public const LANGUAGE_AR_SS = 'ar-ss';
    public const LANGUAGE_AR_SY = 'ar-sy';
    public const LANGUAGE_AR_TD = 'ar-td';
    public const LANGUAGE_AR_TN = 'ar-tn';
    public const LANGUAGE_AR_YE = 'ar-ye';
    public const LANGUAGE__AS = 'as';
    public const LANGUAGE_ASA = 'asa';
    public const LANGUAGE_ASA_TZ = 'asa-tz';
    public const LANGUAGE_AST = 'ast';
    public const LANGUAGE_AST_ES = 'ast-es';
    public const LANGUAGE_AS_IN = 'as-in';
    public const LANGUAGE_AZ = 'az';
    public const LANGUAGE_AZ_AZ = 'az-az';
    public const LANGUAGE_BAS = 'bas';
    public const LANGUAGE_BAS_CM = 'bas-cm';
    public const LANGUAGE_BE = 'be';
    public const LANGUAGE_BEM = 'bem';
    public const LANGUAGE_BEM_ZM = 'bem-zm';
    public const LANGUAGE_BEZ = 'bez';
    public const LANGUAGE_BEZ_TZ = 'bez-tz';
    public const LANGUAGE_BE_BY = 'be-by';
    public const LANGUAGE_BG = 'bg';
    public const LANGUAGE_BGC = 'bgc';
    public const LANGUAGE_BGC_IN = 'bgc-in';
    public const LANGUAGE_BG_BG = 'bg-bg';
    public const LANGUAGE_BHO = 'bho';
    public const LANGUAGE_BHO_IN = 'bho-in';
    public const LANGUAGE_BM = 'bm';
    public const LANGUAGE_BM_ML = 'bm-ml';
    public const LANGUAGE_BN = 'bn';
    public const LANGUAGE_BN_BD = 'bn-bd';
    public const LANGUAGE_BN_IN = 'bn-in';
    public const LANGUAGE_BO = 'bo';
    public const LANGUAGE_BO_CN = 'bo-cn';
    public const LANGUAGE_BO_IN = 'bo-in';
    public const LANGUAGE_BR = 'br';
    public const LANGUAGE_BRX = 'brx';
    public const LANGUAGE_BRX_IN = 'brx-in';
    public const LANGUAGE_BR_FR = 'br-fr';
    public const LANGUAGE_BS = 'bs';
    public const LANGUAGE_BS_BA = 'bs-ba';
    public const LANGUAGE_CA = 'ca';
    public const LANGUAGE_CA_AD = 'ca-ad';
    public const LANGUAGE_CA_ES = 'ca-es';
    public const LANGUAGE_CA_FR = 'ca-fr';
    public const LANGUAGE_CA_IT = 'ca-it';
    public const LANGUAGE_CCP = 'ccp';
    public const LANGUAGE_CCP_BD = 'ccp-bd';
    public const LANGUAGE_CCP_IN = 'ccp-in';
    public const LANGUAGE_CE = 'ce';
    public const LANGUAGE_CEB = 'ceb';
    public const LANGUAGE_CEB_PH = 'ceb-ph';
    public const LANGUAGE_CE_RU = 'ce-ru';
    public const LANGUAGE_CGG = 'cgg';
    public const LANGUAGE_CGG_UG = 'cgg-ug';
    public const LANGUAGE_CHR = 'chr';
    public const LANGUAGE_CHR_US = 'chr-us';
    public const LANGUAGE_CKB = 'ckb';
    public const LANGUAGE_CKB_IQ = 'ckb-iq';
    public const LANGUAGE_CKB_IR = 'ckb-ir';
    public const LANGUAGE_CS = 'cs';
    public const LANGUAGE_CS_CZ = 'cs-cz';
    public const LANGUAGE_CU = 'cu';
    public const LANGUAGE_CU_RU = 'cu-ru';
    public const LANGUAGE_CV = 'cv';
    public const LANGUAGE_CV_RU = 'cv-ru';
    public const LANGUAGE_CY = 'cy';
    public const LANGUAGE_CY_GB = 'cy-gb';
    public const LANGUAGE_DA = 'da';
    public const LANGUAGE_DAV = 'dav';
    public const LANGUAGE_DAV_KE = 'dav-ke';
    public const LANGUAGE_DA_DK = 'da-dk';
    public const LANGUAGE_DA_GL = 'da-gl';
    public const LANGUAGE_DE = 'de';
    public const LANGUAGE_DE_AT = 'de-at';
    public const LANGUAGE_DE_BE = 'de-be';
    public const LANGUAGE_DE_CH = 'de-ch';
    public const LANGUAGE_DE_DE = 'de-de';
    public const LANGUAGE_DE_GR = 'de-gr';
    public const LANGUAGE_DE_IT = 'de-it';
    public const LANGUAGE_DE_LI = 'de-li';
    public const LANGUAGE_DE_LU = 'de-lu';
    public const LANGUAGE_DJE = 'dje';
    public const LANGUAGE_DJE_NE = 'dje-ne';
    public const LANGUAGE_DOI = 'doi';
    public const LANGUAGE_DOI_IN = 'doi-in';
    public const LANGUAGE_DSB = 'dsb';
    public const LANGUAGE_DSB_DE = 'dsb-de';
    public const LANGUAGE_DUA = 'dua';
    public const LANGUAGE_DUA_CM = 'dua-cm';
    public const LANGUAGE_DYO = 'dyo';
    public const LANGUAGE_DYO_SN = 'dyo-sn';
    public const LANGUAGE_DZ = 'dz';
    public const LANGUAGE_DZ_BT = 'dz-bt';
    public const LANGUAGE_EBU = 'ebu';
    public const LANGUAGE_EBU_KE = 'ebu-ke';
    public const LANGUAGE_EE = 'ee';
    public const LANGUAGE_EE_GH = 'ee-gh';
    public const LANGUAGE_EE_TG = 'ee-tg';
    public const LANGUAGE_EL = 'el';
    public const LANGUAGE_EL_CY = 'el-cy';
    public const LANGUAGE_EL_GR = 'el-gr';
    public const LANGUAGE_EN = 'en';
    public const LANGUAGE_EN_001 = 'en-001';
    public const LANGUAGE_EN_150 = 'en-150';
    public const LANGUAGE_EN_AE = 'en-ae';
    public const LANGUAGE_EN_AG = 'en-ag';
    public const LANGUAGE_EN_AI = 'en-ai';
    public const LANGUAGE_EN_AS = 'en-as';
    public const LANGUAGE_EN_AT = 'en-at';
    public const LANGUAGE_EN_AU = 'en-au';
    public const LANGUAGE_EN_BB = 'en-bb';
    public const LANGUAGE_EN_BE = 'en-be';
    public const LANGUAGE_EN_BI = 'en-bi';
    public const LANGUAGE_EN_BM = 'en-bm';
    public const LANGUAGE_EN_BS = 'en-bs';
    public const LANGUAGE_EN_BW = 'en-bw';
    public const LANGUAGE_EN_BZ = 'en-bz';
    public const LANGUAGE_EN_CA = 'en-ca';
    public const LANGUAGE_EN_CC = 'en-cc';
    public const LANGUAGE_EN_CH = 'en-ch';
    public const LANGUAGE_EN_CK = 'en-ck';
    public const LANGUAGE_EN_CM = 'en-cm';
    public const LANGUAGE_EN_CN = 'en-cn';
    public const LANGUAGE_EN_CX = 'en-cx';
    public const LANGUAGE_EN_CY = 'en-cy';
    public const LANGUAGE_EN_DE = 'en-de';
    public const LANGUAGE_EN_DG = 'en-dg';
    public const LANGUAGE_EN_DK = 'en-dk';
    public const LANGUAGE_EN_DM = 'en-dm';
    public const LANGUAGE_EN_EE = 'en-ee';
    public const LANGUAGE_EN_ER = 'en-er';
    public const LANGUAGE_EN_FI = 'en-fi';
    public const LANGUAGE_EN_FJ = 'en-fj';
    public const LANGUAGE_EN_FK = 'en-fk';
    public const LANGUAGE_EN_FM = 'en-fm';
    public const LANGUAGE_EN_FR = 'en-fr';
    public const LANGUAGE_EN_GB = 'en-gb';
    public const LANGUAGE_EN_GD = 'en-gd';
    public const LANGUAGE_EN_GG = 'en-gg';
    public const LANGUAGE_EN_GH = 'en-gh';
    public const LANGUAGE_EN_GI = 'en-gi';
    public const LANGUAGE_EN_GM = 'en-gm';
    public const LANGUAGE_EN_GU = 'en-gu';
    public const LANGUAGE_EN_GY = 'en-gy';
    public const LANGUAGE_EN_HK = 'en-hk';
    public const LANGUAGE_EN_IE = 'en-ie';
    public const LANGUAGE_EN_IL = 'en-il';
    public const LANGUAGE_EN_IM = 'en-im';
    public const LANGUAGE_EN_IN = 'en-in';
    public const LANGUAGE_EN_IO = 'en-io';
    public const LANGUAGE_EN_JE = 'en-je';
    public const LANGUAGE_EN_JM = 'en-jm';
    public const LANGUAGE_EN_KE = 'en-ke';
    public const LANGUAGE_EN_KI = 'en-ki';
    public const LANGUAGE_EN_KN = 'en-kn';
    public const LANGUAGE_EN_KY = 'en-ky';
    public const LANGUAGE_EN_LC = 'en-lc';
    public const LANGUAGE_EN_LR = 'en-lr';
    public const LANGUAGE_EN_LS = 'en-ls';
    public const LANGUAGE_EN_LU = 'en-lu';
    public const LANGUAGE_EN_MG = 'en-mg';
    public const LANGUAGE_EN_MH = 'en-mh';
    public const LANGUAGE_EN_MO = 'en-mo';
    public const LANGUAGE_EN_MP = 'en-mp';
    public const LANGUAGE_EN_MS = 'en-ms';
    public const LANGUAGE_EN_MT = 'en-mt';
    public const LANGUAGE_EN_MU = 'en-mu';
    public const LANGUAGE_EN_MV = 'en-mv';
    public const LANGUAGE_EN_MW = 'en-mw';
    public const LANGUAGE_EN_MX = 'en-mx';
    public const LANGUAGE_EN_MY = 'en-my';
    public const LANGUAGE_EN_NA = 'en-na';
    public const LANGUAGE_EN_NF = 'en-nf';
    public const LANGUAGE_EN_NG = 'en-ng';
    public const LANGUAGE_EN_NL = 'en-nl';
    public const LANGUAGE_EN_NR = 'en-nr';
    public const LANGUAGE_EN_NU = 'en-nu';
    public const LANGUAGE_EN_NZ = 'en-nz';
    public const LANGUAGE_EN_PG = 'en-pg';
    public const LANGUAGE_EN_PH = 'en-ph';
    public const LANGUAGE_EN_PK = 'en-pk';
    public const LANGUAGE_EN_PN = 'en-pn';
    public const LANGUAGE_EN_PR = 'en-pr';
    public const LANGUAGE_EN_PW = 'en-pw';
    public const LANGUAGE_EN_RW = 'en-rw';
    public const LANGUAGE_EN_SB = 'en-sb';
    public const LANGUAGE_EN_SC = 'en-sc';
    public const LANGUAGE_EN_SD = 'en-sd';
    public const LANGUAGE_EN_SE = 'en-se';
    public const LANGUAGE_EN_SG = 'en-sg';
    public const LANGUAGE_EN_SH = 'en-sh';
    public const LANGUAGE_EN_SI = 'en-si';
    public const LANGUAGE_EN_SL = 'en-sl';
    public const LANGUAGE_EN_SS = 'en-ss';
    public const LANGUAGE_EN_SX = 'en-sx';
    public const LANGUAGE_EN_SZ = 'en-sz';
    public const LANGUAGE_EN_TC = 'en-tc';
    public const LANGUAGE_EN_TK = 'en-tk';
    public const LANGUAGE_EN_TO = 'en-to';
    public const LANGUAGE_EN_TT = 'en-tt';
    public const LANGUAGE_EN_TV = 'en-tv';
    public const LANGUAGE_EN_TZ = 'en-tz';
    public const LANGUAGE_EN_UG = 'en-ug';
    public const LANGUAGE_EN_UM = 'en-um';
    public const LANGUAGE_EN_US = 'en-us';
    public const LANGUAGE_EN_VC = 'en-vc';
    public const LANGUAGE_EN_VG = 'en-vg';
    public const LANGUAGE_EN_VI = 'en-vi';
    public const LANGUAGE_EN_VU = 'en-vu';
    public const LANGUAGE_EN_WS = 'en-ws';
    public const LANGUAGE_EN_ZA = 'en-za';
    public const LANGUAGE_EN_ZM = 'en-zm';
    public const LANGUAGE_EN_ZW = 'en-zw';
    public const LANGUAGE_EO = 'eo';
    public const LANGUAGE_EO_001 = 'eo-001';
    public const LANGUAGE_ES = 'es';
    public const LANGUAGE_ES_419 = 'es-419';
    public const LANGUAGE_ES_AR = 'es-ar';
    public const LANGUAGE_ES_BO = 'es-bo';
    public const LANGUAGE_ES_BR = 'es-br';
    public const LANGUAGE_ES_BZ = 'es-bz';
    public const LANGUAGE_ES_CL = 'es-cl';
    public const LANGUAGE_ES_CO = 'es-co';
    public const LANGUAGE_ES_CR = 'es-cr';
    public const LANGUAGE_ES_CU = 'es-cu';
    public const LANGUAGE_ES_DO = 'es-do';
    public const LANGUAGE_ES_EA = 'es-ea';
    public const LANGUAGE_ES_EC = 'es-ec';
    public const LANGUAGE_ES_ES = 'es-es';
    public const LANGUAGE_ES_GQ = 'es-gq';
    public const LANGUAGE_ES_GT = 'es-gt';
    public const LANGUAGE_ES_HN = 'es-hn';
    public const LANGUAGE_ES_IC = 'es-ic';
    public const LANGUAGE_ES_MX = 'es-mx';
    public const LANGUAGE_ES_NI = 'es-ni';
    public const LANGUAGE_ES_PA = 'es-pa';
    public const LANGUAGE_ES_PE = 'es-pe';
    public const LANGUAGE_ES_PH = 'es-ph';
    public const LANGUAGE_ES_PR = 'es-pr';
    public const LANGUAGE_ES_PY = 'es-py';
    public const LANGUAGE_ES_SV = 'es-sv';
    public const LANGUAGE_ES_US = 'es-us';
    public const LANGUAGE_ES_UY = 'es-uy';
    public const LANGUAGE_ES_VE = 'es-ve';
    public const LANGUAGE_ET = 'et';
    public const LANGUAGE_ET_EE = 'et-ee';
    public const LANGUAGE_EU = 'eu';
    public const LANGUAGE_EU_ES = 'eu-es';
    public const LANGUAGE_EWO = 'ewo';
    public const LANGUAGE_EWO_CM = 'ewo-cm';
    public const LANGUAGE_FA = 'fa';
    public const LANGUAGE_FA_AF = 'fa-af';
    public const LANGUAGE_FA_IR = 'fa-ir';
    public const LANGUAGE_FF = 'ff';
    public const LANGUAGE_FF_BF = 'ff-bf';
    public const LANGUAGE_FF_CM = 'ff-cm';
    public const LANGUAGE_FF_GH = 'ff-gh';
    public const LANGUAGE_FF_GM = 'ff-gm';
    public const LANGUAGE_FF_GN = 'ff-gn';
    public const LANGUAGE_FF_GW = 'ff-gw';
    public const LANGUAGE_FF_LR = 'ff-lr';
    public const LANGUAGE_FF_MR = 'ff-mr';
    public const LANGUAGE_FF_NE = 'ff-ne';
    public const LANGUAGE_FF_NG = 'ff-ng';
    public const LANGUAGE_FF_SL = 'ff-sl';
    public const LANGUAGE_FF_SN = 'ff-sn';
    public const LANGUAGE_FI = 'fi';
    public const LANGUAGE_FIL = 'fil';
    public const LANGUAGE_FIL_PH = 'fil-ph';
    public const LANGUAGE_FI_FI = 'fi-fi';
    public const LANGUAGE_FO = 'fo';
    public const LANGUAGE_FO_DK = 'fo-dk';
    public const LANGUAGE_FO_FO = 'fo-fo';
    public const LANGUAGE_FR = 'fr';
    public const LANGUAGE_FRR = 'frr';
    public const LANGUAGE_FRR_DE = 'frr-de';
    public const LANGUAGE_FR_BE = 'fr-be';
    public const LANGUAGE_FR_BF = 'fr-bf';
    public const LANGUAGE_FR_BI = 'fr-bi';
    public const LANGUAGE_FR_BJ = 'fr-bj';
    public const LANGUAGE_FR_BL = 'fr-bl';
    public const LANGUAGE_FR_CA = 'fr-ca';
    public const LANGUAGE_FR_CD = 'fr-cd';
    public const LANGUAGE_FR_CF = 'fr-cf';
    public const LANGUAGE_FR_CG = 'fr-cg';
    public const LANGUAGE_FR_CH = 'fr-ch';
    public const LANGUAGE_FR_CI = 'fr-ci';
    public const LANGUAGE_FR_CM = 'fr-cm';
    public const LANGUAGE_FR_DJ = 'fr-dj';
    public const LANGUAGE_FR_DZ = 'fr-dz';
    public const LANGUAGE_FR_FR = 'fr-fr';
    public const LANGUAGE_FR_GA = 'fr-ga';
    public const LANGUAGE_FR_GF = 'fr-gf';
    public const LANGUAGE_FR_GN = 'fr-gn';
    public const LANGUAGE_FR_GP = 'fr-gp';
    public const LANGUAGE_FR_GQ = 'fr-gq';
    public const LANGUAGE_FR_HT = 'fr-ht';
    public const LANGUAGE_FR_KM = 'fr-km';
    public const LANGUAGE_FR_LU = 'fr-lu';
    public const LANGUAGE_FR_MA = 'fr-ma';
    public const LANGUAGE_FR_MC = 'fr-mc';
    public const LANGUAGE_FR_MF = 'fr-mf';
    public const LANGUAGE_FR_MG = 'fr-mg';
    public const LANGUAGE_FR_ML = 'fr-ml';
    public const LANGUAGE_FR_MQ = 'fr-mq';
    public const LANGUAGE_FR_MR = 'fr-mr';
    public const LANGUAGE_FR_MU = 'fr-mu';
    public const LANGUAGE_FR_NC = 'fr-nc';
    public const LANGUAGE_FR_NE = 'fr-ne';
    public const LANGUAGE_FR_PF = 'fr-pf';
    public const LANGUAGE_FR_PM = 'fr-pm';
    public const LANGUAGE_FR_RE = 'fr-re';
    public const LANGUAGE_FR_RW = 'fr-rw';
    public const LANGUAGE_FR_SC = 'fr-sc';
    public const LANGUAGE_FR_SN = 'fr-sn';
    public const LANGUAGE_FR_SY = 'fr-sy';
    public const LANGUAGE_FR_TD = 'fr-td';
    public const LANGUAGE_FR_TG = 'fr-tg';
    public const LANGUAGE_FR_TN = 'fr-tn';
    public const LANGUAGE_FR_VU = 'fr-vu';
    public const LANGUAGE_FR_WF = 'fr-wf';
    public const LANGUAGE_FR_YT = 'fr-yt';
    public const LANGUAGE_FUR = 'fur';
    public const LANGUAGE_FUR_IT = 'fur-it';
    public const LANGUAGE_FY = 'fy';
    public const LANGUAGE_FY_NL = 'fy-nl';
    public const LANGUAGE_GA = 'ga';
    public const LANGUAGE_GA_GB = 'ga-gb';
    public const LANGUAGE_GA_IE = 'ga-ie';
    public const LANGUAGE_GD = 'gd';
    public const LANGUAGE_GD_GB = 'gd-gb';
    public const LANGUAGE_GL = 'gl';
    public const LANGUAGE_GL_ES = 'gl-es';
    public const LANGUAGE_GSW = 'gsw';
    public const LANGUAGE_GSW_CH = 'gsw-ch';
    public const LANGUAGE_GSW_FR = 'gsw-fr';
    public const LANGUAGE_GSW_LI = 'gsw-li';
    public const LANGUAGE_GU = 'gu';
    public const LANGUAGE_GUZ = 'guz';
    public const LANGUAGE_GUZ_KE = 'guz-ke';
    public const LANGUAGE_GU_IN = 'gu-in';
    public const LANGUAGE_GV = 'gv';
    public const LANGUAGE_GV_IM = 'gv-im';
    public const LANGUAGE_HA = 'ha';
    public const LANGUAGE_HAW = 'haw';
    public const LANGUAGE_HAW_US = 'haw-us';
    public const LANGUAGE_HA_GH = 'ha-gh';
    public const LANGUAGE_HA_NE = 'ha-ne';
    public const LANGUAGE_HA_NG = 'ha-ng';
    public const LANGUAGE_HE = 'he';
    public const LANGUAGE_HI = 'hi';
    public const LANGUAGE_HI_IN = 'hi-in';
    public const LANGUAGE_HR = 'hr';
    public const LANGUAGE_HR_BA = 'hr-ba';
    public const LANGUAGE_HR_HR = 'hr-hr';
    public const LANGUAGE_HSB = 'hsb';
    public const LANGUAGE_HSB_DE = 'hsb-de';
    public const LANGUAGE_HU = 'hu';
    public const LANGUAGE_HU_HU = 'hu-hu';
    public const LANGUAGE_HY = 'hy';
    public const LANGUAGE_HY_AM = 'hy-am';
    public const LANGUAGE_IA = 'ia';
    public const LANGUAGE_IA_001 = 'ia-001';
    public const LANGUAGE_ID = 'id';
    public const LANGUAGE_IG = 'ig';
    public const LANGUAGE_IG_NG = 'ig-ng';
    public const LANGUAGE_II = 'ii';
    public const LANGUAGE_II_CN = 'ii-cn';
    public const LANGUAGE_ID_ID = 'id-id';
    public const LANGUAGE_IS = 'is';
    public const LANGUAGE_IS_IS = 'is-is';
    public const LANGUAGE_IT = 'it';
    public const LANGUAGE_IT_CH = 'it-ch';
    public const LANGUAGE_IT_IT = 'it-it';
    public const LANGUAGE_IT_SM = 'it-sm';
    public const LANGUAGE_IT_VA = 'it-va';
    public const LANGUAGE_HE_IL = 'he-il';
    public const LANGUAGE_JA = 'ja';
    public const LANGUAGE_JA_JP = 'ja-jp';
    public const LANGUAGE_JGO = 'jgo';
    public const LANGUAGE_JGO_CM = 'jgo-cm';
    public const LANGUAGE_YI = 'yi';
    public const LANGUAGE_YI_001 = 'yi-001';
    public const LANGUAGE_JMC = 'jmc';
    public const LANGUAGE_JMC_TZ = 'jmc-tz';
    public const LANGUAGE_JV = 'jv';
    public const LANGUAGE_JV_ID = 'jv-id';
    public const LANGUAGE_KA = 'ka';
    public const LANGUAGE_KAB = 'kab';
    public const LANGUAGE_KAB_DZ = 'kab-dz';
    public const LANGUAGE_KAM = 'kam';
    public const LANGUAGE_KAM_KE = 'kam-ke';
    public const LANGUAGE_KA_GE = 'ka-ge';
    public const LANGUAGE_KDE = 'kde';
    public const LANGUAGE_KDE_TZ = 'kde-tz';
    public const LANGUAGE_KEA = 'kea';
    public const LANGUAGE_KEA_CV = 'kea-cv';
    public const LANGUAGE_KGP = 'kgp';
    public const LANGUAGE_KGP_BR = 'kgp-br';
    public const LANGUAGE_KHQ = 'khq';
    public const LANGUAGE_KHQ_ML = 'khq-ml';
    public const LANGUAGE_KI = 'ki';
    public const LANGUAGE_KI_KE = 'ki-ke';
    public const LANGUAGE_KK = 'kk';
    public const LANGUAGE_KKJ = 'kkj';
    public const LANGUAGE_KKJ_CM = 'kkj-cm';
    public const LANGUAGE_KK_KZ = 'kk-kz';
    public const LANGUAGE_KL = 'kl';
    public const LANGUAGE_KLN = 'kln';
    public const LANGUAGE_KLN_KE = 'kln-ke';
    public const LANGUAGE_KL_GL = 'kl-gl';
    public const LANGUAGE_KM = 'km';
    public const LANGUAGE_KM_KH = 'km-kh';
    public const LANGUAGE_KN = 'kn';
    public const LANGUAGE_KN_IN = 'kn-in';
    public const LANGUAGE_KO = 'ko';
    public const LANGUAGE_KOK = 'kok';
    public const LANGUAGE_KOK_IN = 'kok-in';
    public const LANGUAGE_KO_KP = 'ko-kp';
    public const LANGUAGE_KO_KR = 'ko-kr';
    public const LANGUAGE_KS = 'ks';
    public const LANGUAGE_KSB = 'ksb';
    public const LANGUAGE_KSB_TZ = 'ksb-tz';
    public const LANGUAGE_KSF = 'ksf';
    public const LANGUAGE_KSF_CM = 'ksf-cm';
    public const LANGUAGE_KSH = 'ksh';
    public const LANGUAGE_KSH_DE = 'ksh-de';
    public const LANGUAGE_KS_IN = 'ks-in';
    public const LANGUAGE_KU = 'ku';
    public const LANGUAGE_KU_TR = 'ku-tr';
    public const LANGUAGE_KW = 'kw';
    public const LANGUAGE_KW_GB = 'kw-gb';
    public const LANGUAGE_KY = 'ky';
    public const LANGUAGE_KY_KG = 'ky-kg';
    public const LANGUAGE_LAG = 'lag';
    public const LANGUAGE_LAG_TZ = 'lag-tz';
    public const LANGUAGE_LB = 'lb';
    public const LANGUAGE_LB_LU = 'lb-lu';
    public const LANGUAGE_LG = 'lg';
    public const LANGUAGE_LG_UG = 'lg-ug';
    public const LANGUAGE_LKT = 'lkt';
    public const LANGUAGE_LKT_US = 'lkt-us';
    public const LANGUAGE_LN = 'ln';
    public const LANGUAGE_LN_AO = 'ln-ao';
    public const LANGUAGE_LN_CD = 'ln-cd';
    public const LANGUAGE_LN_CF = 'ln-cf';
    public const LANGUAGE_LN_CG = 'ln-cg';
    public const LANGUAGE_LO = 'lo';
    public const LANGUAGE_LO_LA = 'lo-la';
    public const LANGUAGE_LRC = 'lrc';
    public const LANGUAGE_LRC_IQ = 'lrc-iq';
    public const LANGUAGE_LRC_IR = 'lrc-ir';
    public const LANGUAGE_LT = 'lt';
    public const LANGUAGE_LT_LT = 'lt-lt';
    public const LANGUAGE_LU = 'lu';
    public const LANGUAGE_LUO = 'luo';
    public const LANGUAGE_LUO_KE = 'luo-ke';
    public const LANGUAGE_LUY = 'luy';
    public const LANGUAGE_LUY_KE = 'luy-ke';
    public const LANGUAGE_LU_CD = 'lu-cd';
    public const LANGUAGE_LV = 'lv';
    public const LANGUAGE_LV_LV = 'lv-lv';
    public const LANGUAGE_MAI = 'mai';
    public const LANGUAGE_MAI_IN = 'mai-in';
    public const LANGUAGE_MAS = 'mas';
    public const LANGUAGE_MAS_KE = 'mas-ke';
    public const LANGUAGE_MAS_TZ = 'mas-tz';
    public const LANGUAGE_MDF = 'mdf';
    public const LANGUAGE_MDF_RU = 'mdf-ru';
    public const LANGUAGE_MER = 'mer';
    public const LANGUAGE_MER_KE = 'mer-ke';
    public const LANGUAGE_MFE = 'mfe';
    public const LANGUAGE_MFE_MU = 'mfe-mu';
    public const LANGUAGE_MG = 'mg';
    public const LANGUAGE_MGH = 'mgh';
    public const LANGUAGE_MGH_MZ = 'mgh-mz';
    public const LANGUAGE_MGO = 'mgo';
    public const LANGUAGE_MGO_CM = 'mgo-cm';
    public const LANGUAGE_MG_MG = 'mg-mg';
    public const LANGUAGE_MI = 'mi';
    public const LANGUAGE_MI_NZ = 'mi-nz';
    public const LANGUAGE_MK = 'mk';
    public const LANGUAGE_MK_MK = 'mk-mk';
    public const LANGUAGE_ML = 'ml';
    public const LANGUAGE_ML_IN = 'ml-in';
    public const LANGUAGE_MN = 'mn';
    public const LANGUAGE_MNI = 'mni';
    public const LANGUAGE_MNI_IN = 'mni-in';
    public const LANGUAGE_MN_MN = 'mn-mn';
    public const LANGUAGE_MR = 'mr';
    public const LANGUAGE_MR_IN = 'mr-in';
    public const LANGUAGE_MS = 'ms';
    public const LANGUAGE_MS_BN = 'ms-bn';
    public const LANGUAGE_MS_ID = 'ms-id';
    public const LANGUAGE_MS_MY = 'ms-my';
    public const LANGUAGE_MS_SG = 'ms-sg';
    public const LANGUAGE_MT = 'mt';
    public const LANGUAGE_MT_MT = 'mt-mt';
    public const LANGUAGE_MUA = 'mua';
    public const LANGUAGE_MUA_CM = 'mua-cm';
    public const LANGUAGE_MY = 'my';
    public const LANGUAGE_MY_MM = 'my-mm';
    public const LANGUAGE_MZN = 'mzn';
    public const LANGUAGE_MZN_IR = 'mzn-ir';
    public const LANGUAGE_NAQ = 'naq';
    public const LANGUAGE_NAQ_NA = 'naq-na';
    public const LANGUAGE_NB = 'nb';
    public const LANGUAGE_NB_NO = 'nb-no';
    public const LANGUAGE_NB_SJ = 'nb-sj';
    public const LANGUAGE_ND = 'nd';
    public const LANGUAGE_NDS = 'nds';
    public const LANGUAGE_NDS_DE = 'nds-de';
    public const LANGUAGE_NDS_NL = 'nds-nl';
    public const LANGUAGE_ND_ZW = 'nd-zw';
    public const LANGUAGE_NE = 'ne';
    public const LANGUAGE_NE_IN = 'ne-in';
    public const LANGUAGE_NE_NP = 'ne-np';
    public const LANGUAGE_NL = 'nl';
    public const LANGUAGE_NL_AW = 'nl-aw';
    public const LANGUAGE_NL_BE = 'nl-be';
    public const LANGUAGE_NL_BQ = 'nl-bq';
    public const LANGUAGE_NL_CH = 'nl-ch';
    public const LANGUAGE_NL_CW = 'nl-cw';
    public const LANGUAGE_NL_LU = 'nl-lu';
    public const LANGUAGE_NL_NL = 'nl-nl';
    public const LANGUAGE_NL_SR = 'nl-sr';
    public const LANGUAGE_NL_SX = 'nl-sx';
    public const LANGUAGE_NMG = 'nmg';
    public const LANGUAGE_NMG_CM = 'nmg-cm';
    public const LANGUAGE_NN = 'nn';
    public const LANGUAGE_NNH = 'nnh';
    public const LANGUAGE_NNH_CM = 'nnh-cm';
    public const LANGUAGE_NN_NO = 'nn-no';
    public const LANGUAGE_NO = 'no';
    public const LANGUAGE_NO_NO = 'no-no';
    public const LANGUAGE_NUS = 'nus';
    public const LANGUAGE_NUS_SS = 'nus-ss';
    public const LANGUAGE_NYN = 'nyn';
    public const LANGUAGE_NYN_UG = 'nyn-ug';
    public const LANGUAGE_OC = 'oc';
    public const LANGUAGE_OC_ES = 'oc-es';
    public const LANGUAGE_OC_FR = 'oc-fr';
    public const LANGUAGE_OM = 'om';
    public const LANGUAGE_OM_ET = 'om-et';
    public const LANGUAGE_OM_KE = 'om-ke';
    public const LANGUAGE__OR = 'or';
    public const LANGUAGE_OR_IN = 'or-in';
    public const LANGUAGE_OS = 'os';
    public const LANGUAGE_OS_GE = 'os-ge';
    public const LANGUAGE_OS_RU = 'os-ru';
    public const LANGUAGE_PA = 'pa';
    public const LANGUAGE_PA_IN = 'pa-in';
    public const LANGUAGE_PA_PK = 'pa-pk';
    public const LANGUAGE_PCM = 'pcm';
    public const LANGUAGE_PCM_NG = 'pcm-ng';
    public const LANGUAGE_PIS = 'pis';
    public const LANGUAGE_PIS_SB = 'pis-sb';
    public const LANGUAGE_PL = 'pl';
    public const LANGUAGE_PL_PL = 'pl-pl';
    public const LANGUAGE_PRG = 'prg';
    public const LANGUAGE_PRG_001 = 'prg-001';
    public const LANGUAGE_PS = 'ps';
    public const LANGUAGE_PS_AF = 'ps-af';
    public const LANGUAGE_PS_PK = 'ps-pk';
    public const LANGUAGE_PT = 'pt';
    public const LANGUAGE_PT_AO = 'pt-ao';
    public const LANGUAGE_PT_BR = 'pt-br';
    public const LANGUAGE_PT_CH = 'pt-ch';
    public const LANGUAGE_PT_CV = 'pt-cv';
    public const LANGUAGE_PT_GQ = 'pt-gq';
    public const LANGUAGE_PT_GW = 'pt-gw';
    public const LANGUAGE_PT_LU = 'pt-lu';
    public const LANGUAGE_PT_MO = 'pt-mo';
    public const LANGUAGE_PT_MZ = 'pt-mz';
    public const LANGUAGE_PT_PT = 'pt-pt';
    public const LANGUAGE_PT_ST = 'pt-st';
    public const LANGUAGE_PT_TL = 'pt-tl';
    public const LANGUAGE_QU = 'qu';
    public const LANGUAGE_QU_BO = 'qu-bo';
    public const LANGUAGE_QU_EC = 'qu-ec';
    public const LANGUAGE_QU_PE = 'qu-pe';
    public const LANGUAGE_RAJ = 'raj';
    public const LANGUAGE_RAJ_IN = 'raj-in';
    public const LANGUAGE_RM = 'rm';
    public const LANGUAGE_RM_CH = 'rm-ch';
    public const LANGUAGE_RN = 'rn';
    public const LANGUAGE_RN_BI = 'rn-bi';
    public const LANGUAGE_RO = 'ro';
    public const LANGUAGE_ROF = 'rof';
    public const LANGUAGE_ROF_TZ = 'rof-tz';
    public const LANGUAGE_RO_MD = 'ro-md';
    public const LANGUAGE_RO_RO = 'ro-ro';
    public const LANGUAGE_RU = 'ru';
    public const LANGUAGE_RU_BY = 'ru-by';
    public const LANGUAGE_RU_KG = 'ru-kg';
    public const LANGUAGE_RU_KZ = 'ru-kz';
    public const LANGUAGE_RU_MD = 'ru-md';
    public const LANGUAGE_RU_RU = 'ru-ru';
    public const LANGUAGE_RU_UA = 'ru-ua';
    public const LANGUAGE_RW = 'rw';
    public const LANGUAGE_RWK = 'rwk';
    public const LANGUAGE_RWK_TZ = 'rwk-tz';
    public const LANGUAGE_RW_RW = 'rw-rw';
    public const LANGUAGE_SA = 'sa';
    public const LANGUAGE_SAH = 'sah';
    public const LANGUAGE_SAH_RU = 'sah-ru';
    public const LANGUAGE_SAQ = 'saq';
    public const LANGUAGE_SAQ_KE = 'saq-ke';
    public const LANGUAGE_SAT = 'sat';
    public const LANGUAGE_SAT_IN = 'sat-in';
    public const LANGUAGE_SA_IN = 'sa-in';
    public const LANGUAGE_SBP = 'sbp';
    public const LANGUAGE_SBP_TZ = 'sbp-tz';
    public const LANGUAGE_SC = 'sc';
    public const LANGUAGE_SC_IT = 'sc-it';
    public const LANGUAGE_SD = 'sd';
    public const LANGUAGE_SD_IN = 'sd-in';
    public const LANGUAGE_SD_PK = 'sd-pk';
    public const LANGUAGE_SE = 'se';
    public const LANGUAGE_SEH = 'seh';
    public const LANGUAGE_SEH_MZ = 'seh-mz';
    public const LANGUAGE_SES = 'ses';
    public const LANGUAGE_SES_ML = 'ses-ml';
    public const LANGUAGE_SE_FI = 'se-fi';
    public const LANGUAGE_SE_NO = 'se-no';
    public const LANGUAGE_SE_SE = 'se-se';
    public const LANGUAGE_SG = 'sg';
    public const LANGUAGE_SG_CF = 'sg-cf';
    public const LANGUAGE_SHI = 'shi';
    public const LANGUAGE_SHI_MA = 'shi-ma';
    public const LANGUAGE_SI = 'si';
    public const LANGUAGE_SI_LK = 'si-lk';
    public const LANGUAGE_SK = 'sk';
    public const LANGUAGE_SK_SK = 'sk-sk';
    public const LANGUAGE_SL = 'sl';
    public const LANGUAGE_SL_SI = 'sl-si';
    public const LANGUAGE_SMN = 'smn';
    public const LANGUAGE_SMN_FI = 'smn-fi';
    public const LANGUAGE_SMS = 'sms';
    public const LANGUAGE_SMS_FI = 'sms-fi';
    public const LANGUAGE_SN = 'sn';
    public const LANGUAGE_SN_ZW = 'sn-zw';
    public const LANGUAGE_SO = 'so';
    public const LANGUAGE_SO_DJ = 'so-dj';
    public const LANGUAGE_SO_ET = 'so-et';
    public const LANGUAGE_SO_KE = 'so-ke';
    public const LANGUAGE_SO_SO = 'so-so';
    public const LANGUAGE_SQ = 'sq';
    public const LANGUAGE_SQ_AL = 'sq-al';
    public const LANGUAGE_SQ_MK = 'sq-mk';
    public const LANGUAGE_SQ_XK = 'sq-xk';
    public const LANGUAGE_SR = 'sr';
    public const LANGUAGE_SR_BA = 'sr-ba';
    public const LANGUAGE_SR_CS = 'sr-cs';
    public const LANGUAGE_SR_ME = 'sr-me';
    public const LANGUAGE_SR_RS = 'sr-rs';
    public const LANGUAGE_SR_XK = 'sr-xk';
    public const LANGUAGE_SU = 'su';
    public const LANGUAGE_SU_ID = 'su-id';
    public const LANGUAGE_SV = 'sv';
    public const LANGUAGE_SV_AX = 'sv-ax';
    public const LANGUAGE_SV_FI = 'sv-fi';
    public const LANGUAGE_SV_SE = 'sv-se';
    public const LANGUAGE_SW = 'sw';
    public const LANGUAGE_SW_CD = 'sw-cd';
    public const LANGUAGE_SW_KE = 'sw-ke';
    public const LANGUAGE_SW_TZ = 'sw-tz';
    public const LANGUAGE_SW_UG = 'sw-ug';
    public const LANGUAGE_SY = 'sy';
    public const LANGUAGE_TA = 'ta';
    public const LANGUAGE_TA_IN = 'ta-in';
    public const LANGUAGE_TA_LK = 'ta-lk';
    public const LANGUAGE_TA_MY = 'ta-my';
    public const LANGUAGE_TA_SG = 'ta-sg';
    public const LANGUAGE_TE = 'te';
    public const LANGUAGE_TEO = 'teo';
    public const LANGUAGE_TEO_KE = 'teo-ke';
    public const LANGUAGE_TEO_UG = 'teo-ug';
    public const LANGUAGE_TE_IN = 'te-in';
    public const LANGUAGE_TG = 'tg';
    public const LANGUAGE_TG_TJ = 'tg-tj';
    public const LANGUAGE_TH = 'th';
    public const LANGUAGE_TH_TH = 'th-th';
    public const LANGUAGE_TI = 'ti';
    public const LANGUAGE_TI_ER = 'ti-er';
    public const LANGUAGE_TI_ET = 'ti-et';
    public const LANGUAGE_TK = 'tk';
    public const LANGUAGE_TK_TM = 'tk-tm';
    public const LANGUAGE_TL = 'tl';
    public const LANGUAGE_TO = 'to';
    public const LANGUAGE_TOK = 'tok';
    public const LANGUAGE_TOK_001 = 'tok-001';
    public const LANGUAGE_TO_TO = 'to-to';
    public const LANGUAGE_TR = 'tr';
    public const LANGUAGE_TR_CY = 'tr-cy';
    public const LANGUAGE_TR_TR = 'tr-tr';
    public const LANGUAGE_TT = 'tt';
    public const LANGUAGE_TT_RU = 'tt-ru';
    public const LANGUAGE_TWQ = 'twq';
    public const LANGUAGE_TWQ_NE = 'twq-ne';
    public const LANGUAGE_TZM = 'tzm';
    public const LANGUAGE_TZM_MA = 'tzm-ma';
    public const LANGUAGE_UG = 'ug';
    public const LANGUAGE_UG_CN = 'ug-cn';
    public const LANGUAGE_UK = 'uk';
    public const LANGUAGE_UK_UA = 'uk-ua';
    public const LANGUAGE_UR = 'ur';
    public const LANGUAGE_UR_IN = 'ur-in';
    public const LANGUAGE_UR_PK = 'ur-pk';
    public const LANGUAGE_UZ = 'uz';
    public const LANGUAGE_UZ_AF = 'uz-af';
    public const LANGUAGE_UZ_UZ = 'uz-uz';
    public const LANGUAGE_VAI = 'vai';
    public const LANGUAGE_VAI_LR = 'vai-lr';
    public const LANGUAGE_VI = 'vi';
    public const LANGUAGE_VI_VN = 'vi-vn';
    public const LANGUAGE_VO = 'vo';
    public const LANGUAGE_VO_001 = 'vo-001';
    public const LANGUAGE_VUN = 'vun';
    public const LANGUAGE_VUN_TZ = 'vun-tz';
    public const LANGUAGE_WAE = 'wae';
    public const LANGUAGE_WAE_CH = 'wae-ch';
    public const LANGUAGE_WO = 'wo';
    public const LANGUAGE_WO_SN = 'wo-sn';
    public const LANGUAGE_XH = 'xh';
    public const LANGUAGE_XH_ZA = 'xh-za';
    public const LANGUAGE_XOG = 'xog';
    public const LANGUAGE_XOG_UG = 'xog-ug';
    public const LANGUAGE_YAV = 'yav';
    public const LANGUAGE_YAV_CM = 'yav-cm';
    public const LANGUAGE_YO = 'yo';
    public const LANGUAGE_YO_BJ = 'yo-bj';
    public const LANGUAGE_YO_NG = 'yo-ng';
    public const LANGUAGE_YRL = 'yrl';
    public const LANGUAGE_YRL_BR = 'yrl-br';
    public const LANGUAGE_YRL_CO = 'yrl-co';
    public const LANGUAGE_YRL_VE = 'yrl-ve';
    public const LANGUAGE_YUE = 'yue';
    public const LANGUAGE_YUE_CN = 'yue-cn';
    public const LANGUAGE_YUE_HK = 'yue-hk';
    public const LANGUAGE_ZGH = 'zgh';
    public const LANGUAGE_ZGH_MA = 'zgh-ma';
    public const LANGUAGE_ZH = 'zh';
    public const LANGUAGE_ZH_CN = 'zh-cn';
    public const LANGUAGE_ZH_HANS = 'zh-hans';
    public const LANGUAGE_ZH_HANT = 'zh-hant';
    public const LANGUAGE_ZH_HK = 'zh-hk';
    public const LANGUAGE_ZH_MO = 'zh-mo';
    public const LANGUAGE_ZH_SG = 'zh-sg';
    public const LANGUAGE_ZH_TW = 'zh-tw';
    public const LANGUAGE_ZU = 'zu';
    public const LANGUAGE_ZU_ZA = 'zu-za';
    public const TYPE_AB_EMAIL = 'AB_EMAIL';
    public const TYPE_BATCH_EMAIL = 'BATCH_EMAIL';
    public const TYPE_LOCALTIME_EMAIL = 'LOCALTIME_EMAIL';
    public const TYPE_AUTOMATED_AB_EMAIL = 'AUTOMATED_AB_EMAIL';
    public const TYPE_BLOG_EMAIL = 'BLOG_EMAIL';
    public const TYPE_BLOG_EMAIL_CHILD = 'BLOG_EMAIL_CHILD';
    public const TYPE_RSS_EMAIL = 'RSS_EMAIL';
    public const TYPE_RSS_EMAIL_CHILD = 'RSS_EMAIL_CHILD';
    public const TYPE_RESUBSCRIBE_EMAIL = 'RESUBSCRIBE_EMAIL';
    public const TYPE_OPTIN_EMAIL = 'OPTIN_EMAIL';
    public const TYPE_OPTIN_FOLLOWUP_EMAIL = 'OPTIN_FOLLOWUP_EMAIL';
    public const TYPE_AUTOMATED_EMAIL = 'AUTOMATED_EMAIL';
    public const TYPE_FEEDBACK_CES_EMAIL = 'FEEDBACK_CES_EMAIL';
    public const TYPE_FEEDBACK_CUSTOM_EMAIL = 'FEEDBACK_CUSTOM_EMAIL';
    public const TYPE_FEEDBACK_CUSTOM_SURVEY_EMAIL = 'FEEDBACK_CUSTOM_SURVEY_EMAIL';
    public const TYPE_FEEDBACK_NPS_EMAIL = 'FEEDBACK_NPS_EMAIL';
    public const TYPE_FOLLOWUP_EMAIL = 'FOLLOWUP_EMAIL';
    public const TYPE_LEADFLOW_EMAIL = 'LEADFLOW_EMAIL';
    public const TYPE_SINGLE_SEND_API = 'SINGLE_SEND_API';
    public const TYPE_MARKETING_SINGLE_SEND_API = 'MARKETING_SINGLE_SEND_API';
    public const TYPE_SMTP_TOKEN = 'SMTP_TOKEN';
    public const TYPE_TICKET_EMAIL = 'TICKET_EMAIL';
    public const TYPE_MEMBERSHIP_REGISTRATION_EMAIL = 'MEMBERSHIP_REGISTRATION_EMAIL';
    public const TYPE_MEMBERSHIP_PASSWORD_SAVED_EMAIL = 'MEMBERSHIP_PASSWORD_SAVED_EMAIL';
    public const TYPE_MEMBERSHIP_PASSWORD_RESET_EMAIL = 'MEMBERSHIP_PASSWORD_RESET_EMAIL';
    public const TYPE_MEMBERSHIP_EMAIL_VERIFICATION_EMAIL = 'MEMBERSHIP_EMAIL_VERIFICATION_EMAIL';
    public const TYPE_MEMBERSHIP_PASSWORDLESS_AUTH_EMAIL = 'MEMBERSHIP_PASSWORDLESS_AUTH_EMAIL';
    public const TYPE_MEMBERSHIP_REGISTRATION_FOLLOW_UP_EMAIL = 'MEMBERSHIP_REGISTRATION_FOLLOW_UP_EMAIL';
    public const TYPE_MEMBERSHIP_OTP_LOGIN_EMAIL = 'MEMBERSHIP_OTP_LOGIN_EMAIL';
    public const TYPE_MEMBERSHIP_FOLLOW_UP_EMAIL = 'MEMBERSHIP_FOLLOW_UP_EMAIL';
    public const TYPE_MEMBERSHIP_VERIFICATION_EMAIL = 'MEMBERSHIP_VERIFICATION_EMAIL';
    public const STATE_AUTOMATED = 'AUTOMATED';
    public const STATE_AUTOMATED_DRAFT = 'AUTOMATED_DRAFT';
    public const STATE_AUTOMATED_SENDING = 'AUTOMATED_SENDING';
    public const STATE_AUTOMATED_FOR_FORM = 'AUTOMATED_FOR_FORM';
    public const STATE_AUTOMATED_FOR_FORM_BUFFER = 'AUTOMATED_FOR_FORM_BUFFER';
    public const STATE_AUTOMATED_FOR_FORM_DRAFT = 'AUTOMATED_FOR_FORM_DRAFT';
    public const STATE_AUTOMATED_FOR_FORM_LEGACY = 'AUTOMATED_FOR_FORM_LEGACY';
    public const STATE_BLOG_EMAIL_DRAFT = 'BLOG_EMAIL_DRAFT';
    public const STATE_BLOG_EMAIL_PUBLISHED = 'BLOG_EMAIL_PUBLISHED';
    public const STATE_DRAFT = 'DRAFT';
    public const STATE_DRAFT_AB = 'DRAFT_AB';
    public const STATE_DRAFT_AB_VARIANT = 'DRAFT_AB_VARIANT';
    public const STATE_ERROR = 'ERROR';
    public const STATE_LOSER_AB_VARIANT = 'LOSER_AB_VARIANT';
    public const STATE_PAGE_STUB = 'PAGE_STUB';
    public const STATE_PRE_PROCESSING = 'PRE_PROCESSING';
    public const STATE_PROCESSING = 'PROCESSING';
    public const STATE_PUBLISHED = 'PUBLISHED';
    public const STATE_PUBLISHED_AB = 'PUBLISHED_AB';
    public const STATE_PUBLISHED_AB_VARIANT = 'PUBLISHED_AB_VARIANT';
    public const STATE_PUBLISHED_OR_SCHEDULED = 'PUBLISHED_OR_SCHEDULED';
    public const STATE_RSS_TO_EMAIL_DRAFT = 'RSS_TO_EMAIL_DRAFT';
    public const STATE_RSS_TO_EMAIL_PUBLISHED = 'RSS_TO_EMAIL_PUBLISHED';
    public const STATE_SCHEDULED = 'SCHEDULED';
    public const STATE_SCHEDULED_AB = 'SCHEDULED_AB';
    public const STATE_SCHEDULED_OR_PUBLISHED = 'SCHEDULED_OR_PUBLISHED';
    public const STATE_AUTOMATED_AB = 'AUTOMATED_AB';
    public const STATE_AUTOMATED_AB_VARIANT = 'AUTOMATED_AB_VARIANT';
    public const STATE_AUTOMATED_DRAFT_AB = 'AUTOMATED_DRAFT_AB';
    public const STATE_AUTOMATED_DRAFT_ABVARIANT = 'AUTOMATED_DRAFT_ABVARIANT';
    public const STATE_AUTOMATED_LOSER_ABVARIANT = 'AUTOMATED_LOSER_ABVARIANT';

    /**
     * Gets allowable values of the enum
     *
     * @return string[]
     */
    public function getLanguageAllowableValues()
    {
        return [
            self::LANGUAGE_AF,
            self::LANGUAGE_AF_NA,
            self::LANGUAGE_AF_ZA,
            self::LANGUAGE_AGQ,
            self::LANGUAGE_AGQ_CM,
            self::LANGUAGE_AK,
            self::LANGUAGE_AK_GH,
            self::LANGUAGE_AM,
            self::LANGUAGE_AM_ET,
            self::LANGUAGE_ANN,
            self::LANGUAGE_ANN_NG,
            self::LANGUAGE_AR,
            self::LANGUAGE_AR_001,
            self::LANGUAGE_AR_AE,
            self::LANGUAGE_AR_BH,
            self::LANGUAGE_AR_DJ,
            self::LANGUAGE_AR_DZ,
            self::LANGUAGE_AR_EG,
            self::LANGUAGE_AR_EH,
            self::LANGUAGE_AR_ER,
            self::LANGUAGE_AR_IL,
            self::LANGUAGE_AR_IQ,
            self::LANGUAGE_AR_JO,
            self::LANGUAGE_AR_KM,
            self::LANGUAGE_AR_KW,
            self::LANGUAGE_AR_LB,
            self::LANGUAGE_AR_LY,
            self::LANGUAGE_AR_MA,
            self::LANGUAGE_AR_MR,
            self::LANGUAGE_AR_OM,
            self::LANGUAGE_AR_PS,
            self::LANGUAGE_AR_QA,
            self::LANGUAGE_AR_SA,
            self::LANGUAGE_AR_SD,
            self::LANGUAGE_AR_SO,
            self::LANGUAGE_AR_SS,
            self::LANGUAGE_AR_SY,
            self::LANGUAGE_AR_TD,
            self::LANGUAGE_AR_TN,
            self::LANGUAGE_AR_YE,
            self::LANGUAGE__AS,
            self::LANGUAGE_ASA,
            self::LANGUAGE_ASA_TZ,
            self::LANGUAGE_AST,
            self::LANGUAGE_AST_ES,
            self::LANGUAGE_AS_IN,
            self::LANGUAGE_AZ,
            self::LANGUAGE_AZ_AZ,
            self::LANGUAGE_BAS,
            self::LANGUAGE_BAS_CM,
            self::LANGUAGE_BE,
            self::LANGUAGE_BEM,
            self::LANGUAGE_BEM_ZM,
            self::LANGUAGE_BEZ,
            self::LANGUAGE_BEZ_TZ,
            self::LANGUAGE_BE_BY,
            self::LANGUAGE_BG,
            self::LANGUAGE_BGC,
            self::LANGUAGE_BGC_IN,
            self::LANGUAGE_BG_BG,
            self::LANGUAGE_BHO,
            self::LANGUAGE_BHO_IN,
            self::LANGUAGE_BM,
            self::LANGUAGE_BM_ML,
            self::LANGUAGE_BN,
            self::LANGUAGE_BN_BD,
            self::LANGUAGE_BN_IN,
            self::LANGUAGE_BO,
            self::LANGUAGE_BO_CN,
            self::LANGUAGE_BO_IN,
            self::LANGUAGE_BR,
            self::LANGUAGE_BRX,
            self::LANGUAGE_BRX_IN,
            self::LANGUAGE_BR_FR,
            self::LANGUAGE_BS,
            self::LANGUAGE_BS_BA,
            self::LANGUAGE_CA,
            self::LANGUAGE_CA_AD,
            self::LANGUAGE_CA_ES,
            self::LANGUAGE_CA_FR,
            self::LANGUAGE_CA_IT,
            self::LANGUAGE_CCP,
            self::LANGUAGE_CCP_BD,
            self::LANGUAGE_CCP_IN,
            self::LANGUAGE_CE,
            self::LANGUAGE_CEB,
            self::LANGUAGE_CEB_PH,
            self::LANGUAGE_CE_RU,
            self::LANGUAGE_CGG,
            self::LANGUAGE_CGG_UG,
            self::LANGUAGE_CHR,
            self::LANGUAGE_CHR_US,
            self::LANGUAGE_CKB,
            self::LANGUAGE_CKB_IQ,
            self::LANGUAGE_CKB_IR,
            self::LANGUAGE_CS,
            self::LANGUAGE_CS_CZ,
            self::LANGUAGE_CU,
            self::LANGUAGE_CU_RU,
            self::LANGUAGE_CV,
            self::LANGUAGE_CV_RU,
            self::LANGUAGE_CY,
            self::LANGUAGE_CY_GB,
            self::LANGUAGE_DA,
            self::LANGUAGE_DAV,
            self::LANGUAGE_DAV_KE,
            self::LANGUAGE_DA_DK,
            self::LANGUAGE_DA_GL,
            self::LANGUAGE_DE,
            self::LANGUAGE_DE_AT,
            self::LANGUAGE_DE_BE,
            self::LANGUAGE_DE_CH,
            self::LANGUAGE_DE_DE,
            self::LANGUAGE_DE_GR,
            self::LANGUAGE_DE_IT,
            self::LANGUAGE_DE_LI,
            self::LANGUAGE_DE_LU,
            self::LANGUAGE_DJE,
            self::LANGUAGE_DJE_NE,
            self::LANGUAGE_DOI,
            self::LANGUAGE_DOI_IN,
            self::LANGUAGE_DSB,
            self::LANGUAGE_DSB_DE,
            self::LANGUAGE_DUA,
            self::LANGUAGE_DUA_CM,
            self::LANGUAGE_DYO,
            self::LANGUAGE_DYO_SN,
            self::LANGUAGE_DZ,
            self::LANGUAGE_DZ_BT,
            self::LANGUAGE_EBU,
            self::LANGUAGE_EBU_KE,
            self::LANGUAGE_EE,
            self::LANGUAGE_EE_GH,
            self::LANGUAGE_EE_TG,
            self::LANGUAGE_EL,
            self::LANGUAGE_EL_CY,
            self::LANGUAGE_EL_GR,
            self::LANGUAGE_EN,
            self::LANGUAGE_EN_001,
            self::LANGUAGE_EN_150,
            self::LANGUAGE_EN_AE,
            self::LANGUAGE_EN_AG,
            self::LANGUAGE_EN_AI,
            self::LANGUAGE_EN_AS,
            self::LANGUAGE_EN_AT,
            self::LANGUAGE_EN_AU,
            self::LANGUAGE_EN_BB,
            self::LANGUAGE_EN_BE,
            self::LANGUAGE_EN_BI,
            self::LANGUAGE_EN_BM,
            self::LANGUAGE_EN_BS,
            self::LANGUAGE_EN_BW,
            self::LANGUAGE_EN_BZ,
            self::LANGUAGE_EN_CA,
            self::LANGUAGE_EN_CC,
            self::LANGUAGE_EN_CH,
            self::LANGUAGE_EN_CK,
            self::LANGUAGE_EN_CM,
            self::LANGUAGE_EN_CN,
            self::LANGUAGE_EN_CX,
            self::LANGUAGE_EN_CY,
            self::LANGUAGE_EN_DE,
            self::LANGUAGE_EN_DG,
            self::LANGUAGE_EN_DK,
            self::LANGUAGE_EN_DM,
            self::LANGUAGE_EN_EE,
            self::LANGUAGE_EN_ER,
            self::LANGUAGE_EN_FI,
            self::LANGUAGE_EN_FJ,
            self::LANGUAGE_EN_FK,
            self::LANGUAGE_EN_FM,
            self::LANGUAGE_EN_FR,
            self::LANGUAGE_EN_GB,
            self::LANGUAGE_EN_GD,
            self::LANGUAGE_EN_GG,
            self::LANGUAGE_EN_GH,
            self::LANGUAGE_EN_GI,
            self::LANGUAGE_EN_GM,
            self::LANGUAGE_EN_GU,
            self::LANGUAGE_EN_GY,
            self::LANGUAGE_EN_HK,
            self::LANGUAGE_EN_IE,
            self::LANGUAGE_EN_IL,
            self::LANGUAGE_EN_IM,
            self::LANGUAGE_EN_IN,
            self::LANGUAGE_EN_IO,
            self::LANGUAGE_EN_JE,
            self::LANGUAGE_EN_JM,
            self::LANGUAGE_EN_KE,
            self::LANGUAGE_EN_KI,
            self::LANGUAGE_EN_KN,
            self::LANGUAGE_EN_KY,
            self::LANGUAGE_EN_LC,
            self::LANGUAGE_EN_LR,
            self::LANGUAGE_EN_LS,
            self::LANGUAGE_EN_LU,
            self::LANGUAGE_EN_MG,
            self::LANGUAGE_EN_MH,
            self::LANGUAGE_EN_MO,
            self::LANGUAGE_EN_MP,
            self::LANGUAGE_EN_MS,
            self::LANGUAGE_EN_MT,
            self::LANGUAGE_EN_MU,
            self::LANGUAGE_EN_MV,
            self::LANGUAGE_EN_MW,
            self::LANGUAGE_EN_MX,
            self::LANGUAGE_EN_MY,
            self::LANGUAGE_EN_NA,
            self::LANGUAGE_EN_NF,
            self::LANGUAGE_EN_NG,
            self::LANGUAGE_EN_NL,
            self::LANGUAGE_EN_NR,
            self::LANGUAGE_EN_NU,
            self::LANGUAGE_EN_NZ,
            self::LANGUAGE_EN_PG,
            self::LANGUAGE_EN_PH,
            self::LANGUAGE_EN_PK,
            self::LANGUAGE_EN_PN,
            self::LANGUAGE_EN_PR,
            self::LANGUAGE_EN_PW,
            self::LANGUAGE_EN_RW,
            self::LANGUAGE_EN_SB,
            self::LANGUAGE_EN_SC,
            self::LANGUAGE_EN_SD,
            self::LANGUAGE_EN_SE,
            self::LANGUAGE_EN_SG,
            self::LANGUAGE_EN_SH,
            self::LANGUAGE_EN_SI,
            self::LANGUAGE_EN_SL,
            self::LANGUAGE_EN_SS,
            self::LANGUAGE_EN_SX,
            self::LANGUAGE_EN_SZ,
            self::LANGUAGE_EN_TC,
            self::LANGUAGE_EN_TK,
            self::LANGUAGE_EN_TO,
            self::LANGUAGE_EN_TT,
            self::LANGUAGE_EN_TV,
            self::LANGUAGE_EN_TZ,
            self::LANGUAGE_EN_UG,
            self::LANGUAGE_EN_UM,
            self::LANGUAGE_EN_US,
            self::LANGUAGE_EN_VC,
            self::LANGUAGE_EN_VG,
            self::LANGUAGE_EN_VI,
            self::LANGUAGE_EN_VU,
            self::LANGUAGE_EN_WS,
            self::LANGUAGE_EN_ZA,
            self::LANGUAGE_EN_ZM,
            self::LANGUAGE_EN_ZW,
            self::LANGUAGE_EO,
            self::LANGUAGE_EO_001,
            self::LANGUAGE_ES,
            self::LANGUAGE_ES_419,
            self::LANGUAGE_ES_AR,
            self::LANGUAGE_ES_BO,
            self::LANGUAGE_ES_BR,
            self::LANGUAGE_ES_BZ,
            self::LANGUAGE_ES_CL,
            self::LANGUAGE_ES_CO,
            self::LANGUAGE_ES_CR,
            self::LANGUAGE_ES_CU,
            self::LANGUAGE_ES_DO,
            self::LANGUAGE_ES_EA,
            self::LANGUAGE_ES_EC,
            self::LANGUAGE_ES_ES,
            self::LANGUAGE_ES_GQ,
            self::LANGUAGE_ES_GT,
            self::LANGUAGE_ES_HN,
            self::LANGUAGE_ES_IC,
            self::LANGUAGE_ES_MX,
            self::LANGUAGE_ES_NI,
            self::LANGUAGE_ES_PA,
            self::LANGUAGE_ES_PE,
            self::LANGUAGE_ES_PH,
            self::LANGUAGE_ES_PR,
            self::LANGUAGE_ES_PY,
            self::LANGUAGE_ES_SV,
            self::LANGUAGE_ES_US,
            self::LANGUAGE_ES_UY,
            self::LANGUAGE_ES_VE,
            self::LANGUAGE_ET,
            self::LANGUAGE_ET_EE,
            self::LANGUAGE_EU,
            self::LANGUAGE_EU_ES,
            self::LANGUAGE_EWO,
            self::LANGUAGE_EWO_CM,
            self::LANGUAGE_FA,
            self::LANGUAGE_FA_AF,
            self::LANGUAGE_FA_IR,
            self::LANGUAGE_FF,
            self::LANGUAGE_FF_BF,
            self::LANGUAGE_FF_CM,
            self::LANGUAGE_FF_GH,
            self::LANGUAGE_FF_GM,
            self::LANGUAGE_FF_GN,
            self::LANGUAGE_FF_GW,
            self::LANGUAGE_FF_LR,
            self::LANGUAGE_FF_MR,
            self::LANGUAGE_FF_NE,
            self::LANGUAGE_FF_NG,
            self::LANGUAGE_FF_SL,
            self::LANGUAGE_FF_SN,
            self::LANGUAGE_FI,
            self::LANGUAGE_FIL,
            self::LANGUAGE_FIL_PH,
            self::LANGUAGE_FI_FI,
            self::LANGUAGE_FO,
            self::LANGUAGE_FO_DK,
            self::LANGUAGE_FO_FO,
            self::LANGUAGE_FR,
            self::LANGUAGE_FRR,
            self::LANGUAGE_FRR_DE,
            self::LANGUAGE_FR_BE,
            self::LANGUAGE_FR_BF,
            self::LANGUAGE_FR_BI,
            self::LANGUAGE_FR_BJ,
            self::LANGUAGE_FR_BL,
            self::LANGUAGE_FR_CA,
            self::LANGUAGE_FR_CD,
            self::LANGUAGE_FR_CF,
            self::LANGUAGE_FR_CG,
            self::LANGUAGE_FR_CH,
            self::LANGUAGE_FR_CI,
            self::LANGUAGE_FR_CM,
            self::LANGUAGE_FR_DJ,
            self::LANGUAGE_FR_DZ,
            self::LANGUAGE_FR_FR,
            self::LANGUAGE_FR_GA,
            self::LANGUAGE_FR_GF,
            self::LANGUAGE_FR_GN,
            self::LANGUAGE_FR_GP,
            self::LANGUAGE_FR_GQ,
            self::LANGUAGE_FR_HT,
            self::LANGUAGE_FR_KM,
            self::LANGUAGE_FR_LU,
            self::LANGUAGE_FR_MA,
            self::LANGUAGE_FR_MC,
            self::LANGUAGE_FR_MF,
            self::LANGUAGE_FR_MG,
            self::LANGUAGE_FR_ML,
            self::LANGUAGE_FR_MQ,
            self::LANGUAGE_FR_MR,
            self::LANGUAGE_FR_MU,
            self::LANGUAGE_FR_NC,
            self::LANGUAGE_FR_NE,
            self::LANGUAGE_FR_PF,
            self::LANGUAGE_FR_PM,
            self::LANGUAGE_FR_RE,
            self::LANGUAGE_FR_RW,
            self::LANGUAGE_FR_SC,
            self::LANGUAGE_FR_SN,
            self::LANGUAGE_FR_SY,
            self::LANGUAGE_FR_TD,
            self::LANGUAGE_FR_TG,
            self::LANGUAGE_FR_TN,
            self::LANGUAGE_FR_VU,
            self::LANGUAGE_FR_WF,
            self::LANGUAGE_FR_YT,
            self::LANGUAGE_FUR,
            self::LANGUAGE_FUR_IT,
            self::LANGUAGE_FY,
            self::LANGUAGE_FY_NL,
            self::LANGUAGE_GA,
            self::LANGUAGE_GA_GB,
            self::LANGUAGE_GA_IE,
            self::LANGUAGE_GD,
            self::LANGUAGE_GD_GB,
            self::LANGUAGE_GL,
            self::LANGUAGE_GL_ES,
            self::LANGUAGE_GSW,
            self::LANGUAGE_GSW_CH,
            self::LANGUAGE_GSW_FR,
            self::LANGUAGE_GSW_LI,
            self::LANGUAGE_GU,
            self::LANGUAGE_GUZ,
            self::LANGUAGE_GUZ_KE,
            self::LANGUAGE_GU_IN,
            self::LANGUAGE_GV,
            self::LANGUAGE_GV_IM,
            self::LANGUAGE_HA,
            self::LANGUAGE_HAW,
            self::LANGUAGE_HAW_US,
            self::LANGUAGE_HA_GH,
            self::LANGUAGE_HA_NE,
            self::LANGUAGE_HA_NG,
            self::LANGUAGE_HE,
            self::LANGUAGE_HI,
            self::LANGUAGE_HI_IN,
            self::LANGUAGE_HR,
            self::LANGUAGE_HR_BA,
            self::LANGUAGE_HR_HR,
            self::LANGUAGE_HSB,
            self::LANGUAGE_HSB_DE,
            self::LANGUAGE_HU,
            self::LANGUAGE_HU_HU,
            self::LANGUAGE_HY,
            self::LANGUAGE_HY_AM,
            self::LANGUAGE_IA,
            self::LANGUAGE_IA_001,
            self::LANGUAGE_ID,
            self::LANGUAGE_IG,
            self::LANGUAGE_IG_NG,
            self::LANGUAGE_II,
            self::LANGUAGE_II_CN,
            self::LANGUAGE_ID_ID,
            self::LANGUAGE_IS,
            self::LANGUAGE_IS_IS,
            self::LANGUAGE_IT,
            self::LANGUAGE_IT_CH,
            self::LANGUAGE_IT_IT,
            self::LANGUAGE_IT_SM,
            self::LANGUAGE_IT_VA,
            self::LANGUAGE_HE_IL,
            self::LANGUAGE_JA,
            self::LANGUAGE_JA_JP,
            self::LANGUAGE_JGO,
            self::LANGUAGE_JGO_CM,
            self::LANGUAGE_YI,
            self::LANGUAGE_YI_001,
            self::LANGUAGE_JMC,
            self::LANGUAGE_JMC_TZ,
            self::LANGUAGE_JV,
            self::LANGUAGE_JV_ID,
            self::LANGUAGE_KA,
            self::LANGUAGE_KAB,
            self::LANGUAGE_KAB_DZ,
            self::LANGUAGE_KAM,
            self::LANGUAGE_KAM_KE,
            self::LANGUAGE_KA_GE,
            self::LANGUAGE_KDE,
            self::LANGUAGE_KDE_TZ,
            self::LANGUAGE_KEA,
            self::LANGUAGE_KEA_CV,
            self::LANGUAGE_KGP,
            self::LANGUAGE_KGP_BR,
            self::LANGUAGE_KHQ,
            self::LANGUAGE_KHQ_ML,
            self::LANGUAGE_KI,
            self::LANGUAGE_KI_KE,
            self::LANGUAGE_KK,
            self::LANGUAGE_KKJ,
            self::LANGUAGE_KKJ_CM,
            self::LANGUAGE_KK_KZ,
            self::LANGUAGE_KL,
            self::LANGUAGE_KLN,
            self::LANGUAGE_KLN_KE,
            self::LANGUAGE_KL_GL,
            self::LANGUAGE_KM,
            self::LANGUAGE_KM_KH,
            self::LANGUAGE_KN,
            self::LANGUAGE_KN_IN,
            self::LANGUAGE_KO,
            self::LANGUAGE_KOK,
            self::LANGUAGE_KOK_IN,
            self::LANGUAGE_KO_KP,
            self::LANGUAGE_KO_KR,
            self::LANGUAGE_KS,
            self::LANGUAGE_KSB,
            self::LANGUAGE_KSB_TZ,
            self::LANGUAGE_KSF,
            self::LANGUAGE_KSF_CM,
            self::LANGUAGE_KSH,
            self::LANGUAGE_KSH_DE,
            self::LANGUAGE_KS_IN,
            self::LANGUAGE_KU,
            self::LANGUAGE_KU_TR,
            self::LANGUAGE_KW,
            self::LANGUAGE_KW_GB,
            self::LANGUAGE_KY,
            self::LANGUAGE_KY_KG,
            self::LANGUAGE_LAG,
            self::LANGUAGE_LAG_TZ,
            self::LANGUAGE_LB,
            self::LANGUAGE_LB_LU,
            self::LANGUAGE_LG,
            self::LANGUAGE_LG_UG,
            self::LANGUAGE_LKT,
            self::LANGUAGE_LKT_US,
            self::LANGUAGE_LN,
            self::LANGUAGE_LN_AO,
            self::LANGUAGE_LN_CD,
            self::LANGUAGE_LN_CF,
            self::LANGUAGE_LN_CG,
            self::LANGUAGE_LO,
            self::LANGUAGE_LO_LA,
            self::LANGUAGE_LRC,
            self::LANGUAGE_LRC_IQ,
            self::LANGUAGE_LRC_IR,
            self::LANGUAGE_LT,
            self::LANGUAGE_LT_LT,
            self::LANGUAGE_LU,
            self::LANGUAGE_LUO,
            self::LANGUAGE_LUO_KE,
            self::LANGUAGE_LUY,
            self::LANGUAGE_LUY_KE,
            self::LANGUAGE_LU_CD,
            self::LANGUAGE_LV,
            self::LANGUAGE_LV_LV,
            self::LANGUAGE_MAI,
            self::LANGUAGE_MAI_IN,
            self::LANGUAGE_MAS,
            self::LANGUAGE_MAS_KE,
            self::LANGUAGE_MAS_TZ,
            self::LANGUAGE_MDF,
            self::LANGUAGE_MDF_RU,
            self::LANGUAGE_MER,
            self::LANGUAGE_MER_KE,
            self::LANGUAGE_MFE,
            self::LANGUAGE_MFE_MU,
            self::LANGUAGE_MG,
            self::LANGUAGE_MGH,
            self::LANGUAGE_MGH_MZ,
            self::LANGUAGE_MGO,
            self::LANGUAGE_MGO_CM,
            self::LANGUAGE_MG_MG,
            self::LANGUAGE_MI,
            self::LANGUAGE_MI_NZ,
            self::LANGUAGE_MK,
            self::LANGUAGE_MK_MK,
            self::LANGUAGE_ML,
            self::LANGUAGE_ML_IN,
            self::LANGUAGE_MN,
            self::LANGUAGE_MNI,
            self::LANGUAGE_MNI_IN,
            self::LANGUAGE_MN_MN,
            self::LANGUAGE_MR,
            self::LANGUAGE_MR_IN,
            self::LANGUAGE_MS,
            self::LANGUAGE_MS_BN,
            self::LANGUAGE_MS_ID,
            self::LANGUAGE_MS_MY,
            self::LANGUAGE_MS_SG,
            self::LANGUAGE_MT,
            self::LANGUAGE_MT_MT,
            self::LANGUAGE_MUA,
            self::LANGUAGE_MUA_CM,
            self::LANGUAGE_MY,
            self::LANGUAGE_MY_MM,
            self::LANGUAGE_MZN,
            self::LANGUAGE_MZN_IR,
            self::LANGUAGE_NAQ,
            self::LANGUAGE_NAQ_NA,
            self::LANGUAGE_NB,
            self::LANGUAGE_NB_NO,
            self::LANGUAGE_NB_SJ,
            self::LANGUAGE_ND,
            self::LANGUAGE_NDS,
            self::LANGUAGE_NDS_DE,
            self::LANGUAGE_NDS_NL,
            self::LANGUAGE_ND_ZW,
            self::LANGUAGE_NE,
            self::LANGUAGE_NE_IN,
            self::LANGUAGE_NE_NP,
            self::LANGUAGE_NL,
            self::LANGUAGE_NL_AW,
            self::LANGUAGE_NL_BE,
            self::LANGUAGE_NL_BQ,
            self::LANGUAGE_NL_CH,
            self::LANGUAGE_NL_CW,
            self::LANGUAGE_NL_LU,
            self::LANGUAGE_NL_NL,
            self::LANGUAGE_NL_SR,
            self::LANGUAGE_NL_SX,
            self::LANGUAGE_NMG,
            self::LANGUAGE_NMG_CM,
            self::LANGUAGE_NN,
            self::LANGUAGE_NNH,
            self::LANGUAGE_NNH_CM,
            self::LANGUAGE_NN_NO,
            self::LANGUAGE_NO,
            self::LANGUAGE_NO_NO,
            self::LANGUAGE_NUS,
            self::LANGUAGE_NUS_SS,
            self::LANGUAGE_NYN,
            self::LANGUAGE_NYN_UG,
            self::LANGUAGE_OC,
            self::LANGUAGE_OC_ES,
            self::LANGUAGE_OC_FR,
            self::LANGUAGE_OM,
            self::LANGUAGE_OM_ET,
            self::LANGUAGE_OM_KE,
            self::LANGUAGE__OR,
            self::LANGUAGE_OR_IN,
            self::LANGUAGE_OS,
            self::LANGUAGE_OS_GE,
            self::LANGUAGE_OS_RU,
            self::LANGUAGE_PA,
            self::LANGUAGE_PA_IN,
            self::LANGUAGE_PA_PK,
            self::LANGUAGE_PCM,
            self::LANGUAGE_PCM_NG,
            self::LANGUAGE_PIS,
            self::LANGUAGE_PIS_SB,
            self::LANGUAGE_PL,
            self::LANGUAGE_PL_PL,
            self::LANGUAGE_PRG,
            self::LANGUAGE_PRG_001,
            self::LANGUAGE_PS,
            self::LANGUAGE_PS_AF,
            self::LANGUAGE_PS_PK,
            self::LANGUAGE_PT,
            self::LANGUAGE_PT_AO,
            self::LANGUAGE_PT_BR,
            self::LANGUAGE_PT_CH,
            self::LANGUAGE_PT_CV,
            self::LANGUAGE_PT_GQ,
            self::LANGUAGE_PT_GW,
            self::LANGUAGE_PT_LU,
            self::LANGUAGE_PT_MO,
            self::LANGUAGE_PT_MZ,
            self::LANGUAGE_PT_PT,
            self::LANGUAGE_PT_ST,
            self::LANGUAGE_PT_TL,
            self::LANGUAGE_QU,
            self::LANGUAGE_QU_BO,
            self::LANGUAGE_QU_EC,
            self::LANGUAGE_QU_PE,
            self::LANGUAGE_RAJ,
            self::LANGUAGE_RAJ_IN,
            self::LANGUAGE_RM,
            self::LANGUAGE_RM_CH,
            self::LANGUAGE_RN,
            self::LANGUAGE_RN_BI,
            self::LANGUAGE_RO,
            self::LANGUAGE_ROF,
            self::LANGUAGE_ROF_TZ,
            self::LANGUAGE_RO_MD,
            self::LANGUAGE_RO_RO,
            self::LANGUAGE_RU,
            self::LANGUAGE_RU_BY,
            self::LANGUAGE_RU_KG,
            self::LANGUAGE_RU_KZ,
            self::LANGUAGE_RU_MD,
            self::LANGUAGE_RU_RU,
            self::LANGUAGE_RU_UA,
            self::LANGUAGE_RW,
            self::LANGUAGE_RWK,
            self::LANGUAGE_RWK_TZ,
            self::LANGUAGE_RW_RW,
            self::LANGUAGE_SA,
            self::LANGUAGE_SAH,
            self::LANGUAGE_SAH_RU,
            self::LANGUAGE_SAQ,
            self::LANGUAGE_SAQ_KE,
            self::LANGUAGE_SAT,
            self::LANGUAGE_SAT_IN,
            self::LANGUAGE_SA_IN,
            self::LANGUAGE_SBP,
            self::LANGUAGE_SBP_TZ,
            self::LANGUAGE_SC,
            self::LANGUAGE_SC_IT,
            self::LANGUAGE_SD,
            self::LANGUAGE_SD_IN,
            self::LANGUAGE_SD_PK,
            self::LANGUAGE_SE,
            self::LANGUAGE_SEH,
            self::LANGUAGE_SEH_MZ,
            self::LANGUAGE_SES,
            self::LANGUAGE_SES_ML,
            self::LANGUAGE_SE_FI,
            self::LANGUAGE_SE_NO,
            self::LANGUAGE_SE_SE,
            self::LANGUAGE_SG,
            self::LANGUAGE_SG_CF,
            self::LANGUAGE_SHI,
            self::LANGUAGE_SHI_MA,
            self::LANGUAGE_SI,
            self::LANGUAGE_SI_LK,
            self::LANGUAGE_SK,
            self::LANGUAGE_SK_SK,
            self::LANGUAGE_SL,
            self::LANGUAGE_SL_SI,
            self::LANGUAGE_SMN,
            self::LANGUAGE_SMN_FI,
            self::LANGUAGE_SMS,
            self::LANGUAGE_SMS_FI,
            self::LANGUAGE_SN,
            self::LANGUAGE_SN_ZW,
            self::LANGUAGE_SO,
            self::LANGUAGE_SO_DJ,
            self::LANGUAGE_SO_ET,
            self::LANGUAGE_SO_KE,
            self::LANGUAGE_SO_SO,
            self::LANGUAGE_SQ,
            self::LANGUAGE_SQ_AL,
            self::LANGUAGE_SQ_MK,
            self::LANGUAGE_SQ_XK,
            self::LANGUAGE_SR,
            self::LANGUAGE_SR_BA,
            self::LANGUAGE_SR_CS,
            self::LANGUAGE_SR_ME,
            self::LANGUAGE_SR_RS,
            self::LANGUAGE_SR_XK,
            self::LANGUAGE_SU,
            self::LANGUAGE_SU_ID,
            self::LANGUAGE_SV,
            self::LANGUAGE_SV_AX,
            self::LANGUAGE_SV_FI,
            self::LANGUAGE_SV_SE,
            self::LANGUAGE_SW,
            self::LANGUAGE_SW_CD,
            self::LANGUAGE_SW_KE,
            self::LANGUAGE_SW_TZ,
            self::LANGUAGE_SW_UG,
            self::LANGUAGE_SY,
            self::LANGUAGE_TA,
            self::LANGUAGE_TA_IN,
            self::LANGUAGE_TA_LK,
            self::LANGUAGE_TA_MY,
            self::LANGUAGE_TA_SG,
            self::LANGUAGE_TE,
            self::LANGUAGE_TEO,
            self::LANGUAGE_TEO_KE,
            self::LANGUAGE_TEO_UG,
            self::LANGUAGE_TE_IN,
            self::LANGUAGE_TG,
            self::LANGUAGE_TG_TJ,
            self::LANGUAGE_TH,
            self::LANGUAGE_TH_TH,
            self::LANGUAGE_TI,
            self::LANGUAGE_TI_ER,
            self::LANGUAGE_TI_ET,
            self::LANGUAGE_TK,
            self::LANGUAGE_TK_TM,
            self::LANGUAGE_TL,
            self::LANGUAGE_TO,
            self::LANGUAGE_TOK,
            self::LANGUAGE_TOK_001,
            self::LANGUAGE_TO_TO,
            self::LANGUAGE_TR,
            self::LANGUAGE_TR_CY,
            self::LANGUAGE_TR_TR,
            self::LANGUAGE_TT,
            self::LANGUAGE_TT_RU,
            self::LANGUAGE_TWQ,
            self::LANGUAGE_TWQ_NE,
            self::LANGUAGE_TZM,
            self::LANGUAGE_TZM_MA,
            self::LANGUAGE_UG,
            self::LANGUAGE_UG_CN,
            self::LANGUAGE_UK,
            self::LANGUAGE_UK_UA,
            self::LANGUAGE_UR,
            self::LANGUAGE_UR_IN,
            self::LANGUAGE_UR_PK,
            self::LANGUAGE_UZ,
            self::LANGUAGE_UZ_AF,
            self::LANGUAGE_UZ_UZ,
            self::LANGUAGE_VAI,
            self::LANGUAGE_VAI_LR,
            self::LANGUAGE_VI,
            self::LANGUAGE_VI_VN,
            self::LANGUAGE_VO,
            self::LANGUAGE_VO_001,
            self::LANGUAGE_VUN,
            self::LANGUAGE_VUN_TZ,
            self::LANGUAGE_WAE,
            self::LANGUAGE_WAE_CH,
            self::LANGUAGE_WO,
            self::LANGUAGE_WO_SN,
            self::LANGUAGE_XH,
            self::LANGUAGE_XH_ZA,
            self::LANGUAGE_XOG,
            self::LANGUAGE_XOG_UG,
            self::LANGUAGE_YAV,
            self::LANGUAGE_YAV_CM,
            self::LANGUAGE_YO,
            self::LANGUAGE_YO_BJ,
            self::LANGUAGE_YO_NG,
            self::LANGUAGE_YRL,
            self::LANGUAGE_YRL_BR,
            self::LANGUAGE_YRL_CO,
            self::LANGUAGE_YRL_VE,
            self::LANGUAGE_YUE,
            self::LANGUAGE_YUE_CN,
            self::LANGUAGE_YUE_HK,
            self::LANGUAGE_ZGH,
            self::LANGUAGE_ZGH_MA,
            self::LANGUAGE_ZH,
            self::LANGUAGE_ZH_CN,
            self::LANGUAGE_ZH_HANS,
            self::LANGUAGE_ZH_HANT,
            self::LANGUAGE_ZH_HK,
            self::LANGUAGE_ZH_MO,
            self::LANGUAGE_ZH_SG,
            self::LANGUAGE_ZH_TW,
            self::LANGUAGE_ZU,
            self::LANGUAGE_ZU_ZA,
        ];
    }

    /**
     * Gets allowable values of the enum
     *
     * @return string[]
     */
    public function getTypeAllowableValues()
    {
        return [
            self::TYPE_AB_EMAIL,
            self::TYPE_BATCH_EMAIL,
            self::TYPE_LOCALTIME_EMAIL,
            self::TYPE_AUTOMATED_AB_EMAIL,
            self::TYPE_BLOG_EMAIL,
            self::TYPE_BLOG_EMAIL_CHILD,
            self::TYPE_RSS_EMAIL,
            self::TYPE_RSS_EMAIL_CHILD,
            self::TYPE_RESUBSCRIBE_EMAIL,
            self::TYPE_OPTIN_EMAIL,
            self::TYPE_OPTIN_FOLLOWUP_EMAIL,
            self::TYPE_AUTOMATED_EMAIL,
            self::TYPE_FEEDBACK_CES_EMAIL,
            self::TYPE_FEEDBACK_CUSTOM_EMAIL,
            self::TYPE_FEEDBACK_CUSTOM_SURVEY_EMAIL,
            self::TYPE_FEEDBACK_NPS_EMAIL,
            self::TYPE_FOLLOWUP_EMAIL,
            self::TYPE_LEADFLOW_EMAIL,
            self::TYPE_SINGLE_SEND_API,
            self::TYPE_MARKETING_SINGLE_SEND_API,
            self::TYPE_SMTP_TOKEN,
            self::TYPE_TICKET_EMAIL,
            self::TYPE_MEMBERSHIP_REGISTRATION_EMAIL,
            self::TYPE_MEMBERSHIP_PASSWORD_SAVED_EMAIL,
            self::TYPE_MEMBERSHIP_PASSWORD_RESET_EMAIL,
            self::TYPE_MEMBERSHIP_EMAIL_VERIFICATION_EMAIL,
            self::TYPE_MEMBERSHIP_PASSWORDLESS_AUTH_EMAIL,
            self::TYPE_MEMBERSHIP_REGISTRATION_FOLLOW_UP_EMAIL,
            self::TYPE_MEMBERSHIP_OTP_LOGIN_EMAIL,
            self::TYPE_MEMBERSHIP_FOLLOW_UP_EMAIL,
            self::TYPE_MEMBERSHIP_VERIFICATION_EMAIL,
        ];
    }

    /**
     * Gets allowable values of the enum
     *
     * @return string[]
     */
    public function getStateAllowableValues()
    {
        return [
            self::STATE_AUTOMATED,
            self::STATE_AUTOMATED_DRAFT,
            self::STATE_AUTOMATED_SENDING,
            self::STATE_AUTOMATED_FOR_FORM,
            self::STATE_AUTOMATED_FOR_FORM_BUFFER,
            self::STATE_AUTOMATED_FOR_FORM_DRAFT,
            self::STATE_AUTOMATED_FOR_FORM_LEGACY,
            self::STATE_BLOG_EMAIL_DRAFT,
            self::STATE_BLOG_EMAIL_PUBLISHED,
            self::STATE_DRAFT,
            self::STATE_DRAFT_AB,
            self::STATE_DRAFT_AB_VARIANT,
            self::STATE_ERROR,
            self::STATE_LOSER_AB_VARIANT,
            self::STATE_PAGE_STUB,
            self::STATE_PRE_PROCESSING,
            self::STATE_PROCESSING,
            self::STATE_PUBLISHED,
            self::STATE_PUBLISHED_AB,
            self::STATE_PUBLISHED_AB_VARIANT,
            self::STATE_PUBLISHED_OR_SCHEDULED,
            self::STATE_RSS_TO_EMAIL_DRAFT,
            self::STATE_RSS_TO_EMAIL_PUBLISHED,
            self::STATE_SCHEDULED,
            self::STATE_SCHEDULED_AB,
            self::STATE_SCHEDULED_OR_PUBLISHED,
            self::STATE_AUTOMATED_AB,
            self::STATE_AUTOMATED_AB_VARIANT,
            self::STATE_AUTOMATED_DRAFT_AB,
            self::STATE_AUTOMATED_DRAFT_ABVARIANT,
            self::STATE_AUTOMATED_LOSER_ABVARIANT,
        ];
    }

    /**
     * Associative array for storing property values
     *
     * @var mixed[]
     */
    protected $container = [];

    /**
     * Constructor
     *
     * @param mixed[]|null $data Associated array of property values
     *                      initializing the model
     */
    public function __construct(?array $data = null)
    {
        $this->setIfExists('feedback_survey_id', $data ?? [], null);
        $this->setIfExists('subject', $data ?? [], null);
        $this->setIfExists('publish_date', $data ?? [], null);
        $this->setIfExists('is_transactional', $data ?? [], null);
        $this->setIfExists('language', $data ?? [], null);
        $this->setIfExists('type', $data ?? [], null);
        $this->setIfExists('content', $data ?? [], null);
        $this->setIfExists('business_unit_id', $data ?? [], null);
        $this->setIfExists('webversion', $data ?? [], null);
        $this->setIfExists('workflow_names', $data ?? [], null);
        $this->setIfExists('archived', $data ?? [], null);
        $this->setIfExists('created_at', $data ?? [], null);
        $this->setIfExists('stats', $data ?? [], null);
        $this->setIfExists('jitter_send_time', $data ?? [], null);
        $this->setIfExists('from', $data ?? [], null);
        $this->setIfExists('id', $data ?? [], null);
        $this->setIfExists('state', $data ?? [], null);
        $this->setIfExists('created_by_id', $data ?? [], null);
        $this->setIfExists('updated_at', $data ?? [], null);
        $this->setIfExists('rss_data', $data ?? [], null);
        $this->setIfExists('published_at', $data ?? [], null);
        $this->setIfExists('published_by_id', $data ?? [], null);
        $this->setIfExists('is_published', $data ?? [], null);
        $this->setIfExists('testing', $data ?? [], null);
        $this->setIfExists('updated_by_id', $data ?? [], null);
        $this->setIfExists('folder_id', $data ?? [], null);
        $this->setIfExists('subscription_details', $data ?? [], null);
        $this->setIfExists('deleted_at', $data ?? [], null);
        $this->setIfExists('name', $data ?? [], null);
        $this->setIfExists('active_domain', $data ?? [], null);
        $this->setIfExists('campaign', $data ?? [], null);
        $this->setIfExists('to', $data ?? [], null);
        $this->setIfExists('subcategory', $data ?? [], null);
        $this->setIfExists('campaign_name', $data ?? [], null);
        $this->setIfExists('send_on_publish', $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 = [];

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

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

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

        if ($this->container['name'] === null) {
            $invalidProperties[] = "'name' can't be null";
        }
        if ($this->container['to'] === null) {
            $invalidProperties[] = "'to' can't be null";
        }
        if ($this->container['subcategory'] === null) {
            $invalidProperties[] = "'subcategory' can't be null";
        }
        if ($this->container['send_on_publish'] === null) {
            $invalidProperties[] = "'send_on_publish' can't be null";
        }
        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 feedback_survey_id
     *
     * @return string|null
     */
    public function getFeedbackSurveyId()
    {
        return $this->container['feedback_survey_id'];
    }

    /**
     * Sets feedback_survey_id
     *
     * @param string|null $feedback_survey_id The ID of the feedback survey linked to the email.
     *
     * @return self
     */
    public function setFeedbackSurveyId($feedback_survey_id)
    {
        if (is_null($feedback_survey_id)) {
            throw new \InvalidArgumentException('non-nullable feedback_survey_id cannot be null');
        }
        $this->container['feedback_survey_id'] = $feedback_survey_id;

        return $this;
    }

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

    /**
     * Sets subject
     *
     * @param string $subject The subject of the email.
     *
     * @return self
     */
    public function setSubject($subject)
    {
        if (is_null($subject)) {
            throw new \InvalidArgumentException('non-nullable subject cannot be null');
        }
        $this->container['subject'] = $subject;

        return $this;
    }

    /**
     * Gets publish_date
     *
     * @return \DateTime|null
     */
    public function getPublishDate()
    {
        return $this->container['publish_date'];
    }

    /**
     * Sets publish_date
     *
     * @param \DateTime|null $publish_date The date and time the email is scheduled for, in ISO8601 representation. This is only used in local time or scheduled emails.
     *
     * @return self
     */
    public function setPublishDate($publish_date)
    {
        if (is_null($publish_date)) {
            throw new \InvalidArgumentException('non-nullable publish_date cannot be null');
        }
        $this->container['publish_date'] = $publish_date;

        return $this;
    }

    /**
     * Gets is_transactional
     *
     * @return bool|null
     */
    public function getIsTransactional()
    {
        return $this->container['is_transactional'];
    }

    /**
     * Sets is_transactional
     *
     * @param bool|null $is_transactional Returns whether the email is a transactional email or not. This is read only.
     *
     * @return self
     */
    public function setIsTransactional($is_transactional)
    {
        if (is_null($is_transactional)) {
            throw new \InvalidArgumentException('non-nullable is_transactional cannot be null');
        }
        $this->container['is_transactional'] = $is_transactional;

        return $this;
    }

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

    /**
     * Sets language
     *
     * @param string|null $language language
     *
     * @return self
     */
    public function setLanguage($language)
    {
        if (is_null($language)) {
            throw new \InvalidArgumentException('non-nullable language cannot be null');
        }
        $allowedValues = $this->getLanguageAllowableValues();
        if (!in_array($language, $allowedValues, true)) {
            throw new \InvalidArgumentException(
                sprintf(
                    "Invalid value '%s' for 'language', must be one of '%s'",
                    $language,
                    implode("', '", $allowedValues)
                )
            );
        }
        $this->container['language'] = $language;

        return $this;
    }

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

    /**
     * Sets type
     *
     * @param string|null $type The email type, this is derived from other properties on the email such as subcategory.
     *
     * @return self
     */
    public function setType($type)
    {
        if (is_null($type)) {
            throw new \InvalidArgumentException('non-nullable type cannot be null');
        }
        $allowedValues = $this->getTypeAllowableValues();
        if (!in_array($type, $allowedValues, true)) {
            throw new \InvalidArgumentException(
                sprintf(
                    "Invalid value '%s' for 'type', must be one of '%s'",
                    $type,
                    implode("', '", $allowedValues)
                )
            );
        }
        $this->container['type'] = $type;

        return $this;
    }

    /**
     * Gets content
     *
     * @return \HubSpot\Client\Marketing\Emails\Model\PublicEmailContent
     */
    public function getContent()
    {
        return $this->container['content'];
    }

    /**
     * Sets content
     *
     * @param \HubSpot\Client\Marketing\Emails\Model\PublicEmailContent $content content
     *
     * @return self
     */
    public function setContent($content)
    {
        if (is_null($content)) {
            throw new \InvalidArgumentException('non-nullable content cannot be null');
        }
        $this->container['content'] = $content;

        return $this;
    }

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

    /**
     * Sets business_unit_id
     *
     * @param string|null $business_unit_id business_unit_id
     *
     * @return self
     */
    public function setBusinessUnitId($business_unit_id)
    {
        if (is_null($business_unit_id)) {
            throw new \InvalidArgumentException('non-nullable business_unit_id cannot be null');
        }
        $this->container['business_unit_id'] = $business_unit_id;

        return $this;
    }

    /**
     * Gets webversion
     *
     * @return \HubSpot\Client\Marketing\Emails\Model\PublicWebversionDetails|null
     */
    public function getWebversion()
    {
        return $this->container['webversion'];
    }

    /**
     * Sets webversion
     *
     * @param \HubSpot\Client\Marketing\Emails\Model\PublicWebversionDetails|null $webversion webversion
     *
     * @return self
     */
    public function setWebversion($webversion)
    {
        if (is_null($webversion)) {
            throw new \InvalidArgumentException('non-nullable webversion cannot be null');
        }
        $this->container['webversion'] = $webversion;

        return $this;
    }

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

    /**
     * Sets workflow_names
     *
     * @param string[]|null $workflow_names workflow_names
     *
     * @return self
     */
    public function setWorkflowNames($workflow_names)
    {
        if (is_null($workflow_names)) {
            throw new \InvalidArgumentException('non-nullable workflow_names cannot be null');
        }
        $this->container['workflow_names'] = $workflow_names;

        return $this;
    }

    /**
     * Gets archived
     *
     * @return bool|null
     */
    public function getArchived()
    {
        return $this->container['archived'];
    }

    /**
     * Sets archived
     *
     * @param bool|null $archived Determines if the email is archived or not.
     *
     * @return self
     */
    public function setArchived($archived)
    {
        if (is_null($archived)) {
            throw new \InvalidArgumentException('non-nullable archived cannot be null');
        }
        $this->container['archived'] = $archived;

        return $this;
    }

    /**
     * Gets created_at
     *
     * @return \DateTime|null
     */
    public function getCreatedAt()
    {
        return $this->container['created_at'];
    }

    /**
     * Sets created_at
     *
     * @param \DateTime|null $created_at The date and time of the email's creation, in ISO8601 representation.
     *
     * @return self
     */
    public function setCreatedAt($created_at)
    {
        if (is_null($created_at)) {
            throw new \InvalidArgumentException('non-nullable created_at cannot be null');
        }
        $this->container['created_at'] = $created_at;

        return $this;
    }

    /**
     * Gets stats
     *
     * @return \HubSpot\Client\Marketing\Emails\Model\EmailStatisticsData|null
     */
    public function getStats()
    {
        return $this->container['stats'];
    }

    /**
     * Sets stats
     *
     * @param \HubSpot\Client\Marketing\Emails\Model\EmailStatisticsData|null $stats stats
     *
     * @return self
     */
    public function setStats($stats)
    {
        if (is_null($stats)) {
            throw new \InvalidArgumentException('non-nullable stats cannot be null');
        }
        $this->container['stats'] = $stats;

        return $this;
    }

    /**
     * Gets jitter_send_time
     *
     * @return bool|null
     */
    public function getJitterSendTime()
    {
        return $this->container['jitter_send_time'];
    }

    /**
     * Sets jitter_send_time
     *
     * @param bool|null $jitter_send_time jitter_send_time
     *
     * @return self
     */
    public function setJitterSendTime($jitter_send_time)
    {
        if (is_null($jitter_send_time)) {
            throw new \InvalidArgumentException('non-nullable jitter_send_time cannot be null');
        }
        $this->container['jitter_send_time'] = $jitter_send_time;

        return $this;
    }

    /**
     * Gets from
     *
     * @return \HubSpot\Client\Marketing\Emails\Model\PublicEmailFromDetails
     */
    public function getFrom()
    {
        return $this->container['from'];
    }

    /**
     * Sets from
     *
     * @param \HubSpot\Client\Marketing\Emails\Model\PublicEmailFromDetails $from from
     *
     * @return self
     */
    public function setFrom($from)
    {
        if (is_null($from)) {
            throw new \InvalidArgumentException('non-nullable from cannot be null');
        }
        $this->container['from'] = $from;

        return $this;
    }

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

    /**
     * Sets id
     *
     * @param string $id The email ID.
     *
     * @return self
     */
    public function setId($id)
    {
        if (is_null($id)) {
            throw new \InvalidArgumentException('non-nullable id cannot be null');
        }
        $this->container['id'] = $id;

        return $this;
    }

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

    /**
     * Sets state
     *
     * @param string $state The email state.
     *
     * @return self
     */
    public function setState($state)
    {
        if (is_null($state)) {
            throw new \InvalidArgumentException('non-nullable state cannot be null');
        }
        $allowedValues = $this->getStateAllowableValues();
        if (!in_array($state, $allowedValues, true)) {
            throw new \InvalidArgumentException(
                sprintf(
                    "Invalid value '%s' for 'state', must be one of '%s'",
                    $state,
                    implode("', '", $allowedValues)
                )
            );
        }
        $this->container['state'] = $state;

        return $this;
    }

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

    /**
     * Sets created_by_id
     *
     * @param string|null $created_by_id The id of the user who created the email.
     *
     * @return self
     */
    public function setCreatedById($created_by_id)
    {
        if (is_null($created_by_id)) {
            throw new \InvalidArgumentException('non-nullable created_by_id cannot be null');
        }
        $this->container['created_by_id'] = $created_by_id;

        return $this;
    }

    /**
     * Gets updated_at
     *
     * @return \DateTime|null
     */
    public function getUpdatedAt()
    {
        return $this->container['updated_at'];
    }

    /**
     * Sets updated_at
     *
     * @param \DateTime|null $updated_at The date and time of the last update to the email, in ISO8601 representation.
     *
     * @return self
     */
    public function setUpdatedAt($updated_at)
    {
        if (is_null($updated_at)) {
            throw new \InvalidArgumentException('non-nullable updated_at cannot be null');
        }
        $this->container['updated_at'] = $updated_at;

        return $this;
    }

    /**
     * Gets rss_data
     *
     * @return \HubSpot\Client\Marketing\Emails\Model\PublicRssEmailDetails|null
     */
    public function getRssData()
    {
        return $this->container['rss_data'];
    }

    /**
     * Sets rss_data
     *
     * @param \HubSpot\Client\Marketing\Emails\Model\PublicRssEmailDetails|null $rss_data rss_data
     *
     * @return self
     */
    public function setRssData($rss_data)
    {
        if (is_null($rss_data)) {
            throw new \InvalidArgumentException('non-nullable rss_data cannot be null');
        }
        $this->container['rss_data'] = $rss_data;

        return $this;
    }

    /**
     * Gets published_at
     *
     * @return \DateTime|null
     */
    public function getPublishedAt()
    {
        return $this->container['published_at'];
    }

    /**
     * Sets published_at
     *
     * @param \DateTime|null $published_at The date and time the email was published at, in ISO8601 representation.
     *
     * @return self
     */
    public function setPublishedAt($published_at)
    {
        if (is_null($published_at)) {
            throw new \InvalidArgumentException('non-nullable published_at cannot be null');
        }
        $this->container['published_at'] = $published_at;

        return $this;
    }

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

    /**
     * Sets published_by_id
     *
     * @param string|null $published_by_id published_by_id
     *
     * @return self
     */
    public function setPublishedById($published_by_id)
    {
        if (is_null($published_by_id)) {
            throw new \InvalidArgumentException('non-nullable published_by_id cannot be null');
        }
        $this->container['published_by_id'] = $published_by_id;

        return $this;
    }

    /**
     * Gets is_published
     *
     * @return bool|null
     */
    public function getIsPublished()
    {
        return $this->container['is_published'];
    }

    /**
     * Sets is_published
     *
     * @param bool|null $is_published Returns the published status of the email. This is read only.
     *
     * @return self
     */
    public function setIsPublished($is_published)
    {
        if (is_null($is_published)) {
            throw new \InvalidArgumentException('non-nullable is_published cannot be null');
        }
        $this->container['is_published'] = $is_published;

        return $this;
    }

    /**
     * Gets testing
     *
     * @return \HubSpot\Client\Marketing\Emails\Model\PublicEmailTestingDetails|null
     */
    public function getTesting()
    {
        return $this->container['testing'];
    }

    /**
     * Sets testing
     *
     * @param \HubSpot\Client\Marketing\Emails\Model\PublicEmailTestingDetails|null $testing testing
     *
     * @return self
     */
    public function setTesting($testing)
    {
        if (is_null($testing)) {
            throw new \InvalidArgumentException('non-nullable testing cannot be null');
        }
        $this->container['testing'] = $testing;

        return $this;
    }

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

    /**
     * Sets updated_by_id
     *
     * @param string|null $updated_by_id The id of the user who last updated the email.
     *
     * @return self
     */
    public function setUpdatedById($updated_by_id)
    {
        if (is_null($updated_by_id)) {
            throw new \InvalidArgumentException('non-nullable updated_by_id cannot be null');
        }
        $this->container['updated_by_id'] = $updated_by_id;

        return $this;
    }

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

    /**
     * Sets folder_id
     *
     * @param int|null $folder_id folder_id
     *
     * @return self
     */
    public function setFolderId($folder_id)
    {
        if (is_null($folder_id)) {
            throw new \InvalidArgumentException('non-nullable folder_id cannot be null');
        }
        $this->container['folder_id'] = $folder_id;

        return $this;
    }

    /**
     * Gets subscription_details
     *
     * @return \HubSpot\Client\Marketing\Emails\Model\PublicEmailSubscriptionDetails|null
     */
    public function getSubscriptionDetails()
    {
        return $this->container['subscription_details'];
    }

    /**
     * Sets subscription_details
     *
     * @param \HubSpot\Client\Marketing\Emails\Model\PublicEmailSubscriptionDetails|null $subscription_details subscription_details
     *
     * @return self
     */
    public function setSubscriptionDetails($subscription_details)
    {
        if (is_null($subscription_details)) {
            throw new \InvalidArgumentException('non-nullable subscription_details cannot be null');
        }
        $this->container['subscription_details'] = $subscription_details;

        return $this;
    }

    /**
     * Gets deleted_at
     *
     * @return \DateTime|null
     */
    public function getDeletedAt()
    {
        return $this->container['deleted_at'];
    }

    /**
     * Sets deleted_at
     *
     * @param \DateTime|null $deleted_at deleted_at
     *
     * @return self
     */
    public function setDeletedAt($deleted_at)
    {
        if (is_null($deleted_at)) {
            throw new \InvalidArgumentException('non-nullable deleted_at cannot be null');
        }
        $this->container['deleted_at'] = $deleted_at;

        return $this;
    }

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

    /**
     * Sets name
     *
     * @param string $name The name of the email, as displayed on the email dashboard.
     *
     * @return self
     */
    public function setName($name)
    {
        if (is_null($name)) {
            throw new \InvalidArgumentException('non-nullable name cannot be null');
        }
        $this->container['name'] = $name;

        return $this;
    }

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

    /**
     * Sets active_domain
     *
     * @param string|null $active_domain The active domain of the email.
     *
     * @return self
     */
    public function setActiveDomain($active_domain)
    {
        if (is_null($active_domain)) {
            throw new \InvalidArgumentException('non-nullable active_domain cannot be null');
        }
        $this->container['active_domain'] = $active_domain;

        return $this;
    }

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

    /**
     * Sets campaign
     *
     * @param string|null $campaign The campaign id on the email.
     *
     * @return self
     */
    public function setCampaign($campaign)
    {
        if (is_null($campaign)) {
            throw new \InvalidArgumentException('non-nullable campaign cannot be null');
        }
        $this->container['campaign'] = $campaign;

        return $this;
    }

    /**
     * Gets to
     *
     * @return \HubSpot\Client\Marketing\Emails\Model\PublicEmailToDetails
     */
    public function getTo()
    {
        return $this->container['to'];
    }

    /**
     * Sets to
     *
     * @param \HubSpot\Client\Marketing\Emails\Model\PublicEmailToDetails $to to
     *
     * @return self
     */
    public function setTo($to)
    {
        if (is_null($to)) {
            throw new \InvalidArgumentException('non-nullable to cannot be null');
        }
        $this->container['to'] = $to;

        return $this;
    }

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

    /**
     * Sets subcategory
     *
     * @param string $subcategory The email subcategory.
     *
     * @return self
     */
    public function setSubcategory($subcategory)
    {
        if (is_null($subcategory)) {
            throw new \InvalidArgumentException('non-nullable subcategory cannot be null');
        }
        $this->container['subcategory'] = $subcategory;

        return $this;
    }

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

    /**
     * Sets campaign_name
     *
     * @param string|null $campaign_name campaign_name
     *
     * @return self
     */
    public function setCampaignName($campaign_name)
    {
        if (is_null($campaign_name)) {
            throw new \InvalidArgumentException('non-nullable campaign_name cannot be null');
        }
        $this->container['campaign_name'] = $campaign_name;

        return $this;
    }

    /**
     * Gets send_on_publish
     *
     * @return bool
     */
    public function getSendOnPublish()
    {
        return $this->container['send_on_publish'];
    }

    /**
     * Sets send_on_publish
     *
     * @param bool $send_on_publish Determines whether the email will be sent immediately on publish.
     *
     * @return self
     */
    public function setSendOnPublish($send_on_publish)
    {
        if (is_null($send_on_publish)) {
            throw new \InvalidArgumentException('non-nullable send_on_publish cannot be null');
        }
        $this->container['send_on_publish'] = $send_on_publish;

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


