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

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

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

    /**
      * Array of property to type mappings. Used for (de)serialization
      *
      * @var string[]
      */
    protected static $openAPITypes = [
        'email_body_padding' => 'string',
        'color_picker_favorite5' => 'string',
        'body_color' => 'string',
        'color_picker_favorite6' => 'string',
        'background_image' => 'string',
        'email_body_width' => 'string',
        'secondary_font' => 'string',
        'primary_accent_color' => 'string',
        'color_picker_favorite3' => 'string',
        'primary_font_line_height' => 'string',
        'color_picker_favorite4' => 'string',
        'secondary_font_color' => 'string',
        'color_picker_favorite1' => 'string',
        'color_picker_favorite2' => 'string',
        'body_border_color' => 'string',
        'body_border_width' => 'int',
        'links_font' => '\HubSpot\Client\Marketing\Emails\Model\PublicFontStyle',
        'background_color' => 'string',
        'background_image_type' => 'string',
        'divider_style_settings' => '\HubSpot\Client\Marketing\Emails\Model\PublicDividerStyleSettings',
        'secondary_accent_color' => 'string',
        'secondary_font_line_height' => 'string',
        'primary_font_size' => 'int',
        'secondary_font_size' => 'int',
        'primary_font_color' => 'string',
        'heading_one_font' => '\HubSpot\Client\Marketing\Emails\Model\PublicFontStyle',
        'primary_font' => 'string',
        'heading_two_font' => '\HubSpot\Client\Marketing\Emails\Model\PublicFontStyle',
        'button_style_settings' => '\HubSpot\Client\Marketing\Emails\Model\PublicButtonStyleSettings',
        'body_border_color_choice' => 'string'
    ];

    /**
      * Array of property to format mappings. Used for (de)serialization
      *
      * @var string[]
      * @phpstan-var array<string, string|null>
      * @psalm-var array<string, string|null>
      */
    protected static $openAPIFormats = [
        'email_body_padding' => null,
        'color_picker_favorite5' => null,
        'body_color' => null,
        'color_picker_favorite6' => null,
        'background_image' => null,
        'email_body_width' => null,
        'secondary_font' => null,
        'primary_accent_color' => null,
        'color_picker_favorite3' => null,
        'primary_font_line_height' => null,
        'color_picker_favorite4' => null,
        'secondary_font_color' => null,
        'color_picker_favorite1' => null,
        'color_picker_favorite2' => null,
        'body_border_color' => null,
        'body_border_width' => 'int32',
        'links_font' => null,
        'background_color' => null,
        'background_image_type' => null,
        'divider_style_settings' => null,
        'secondary_accent_color' => null,
        'secondary_font_line_height' => null,
        'primary_font_size' => 'int32',
        'secondary_font_size' => 'int32',
        'primary_font_color' => null,
        'heading_one_font' => null,
        'primary_font' => null,
        'heading_two_font' => null,
        'button_style_settings' => null,
        'body_border_color_choice' => null
    ];

    /**
      * Array of nullable properties. Used for (de)serialization
      *
      * @var boolean[]
      */
    protected static array $openAPINullables = [
        'email_body_padding' => false,
        'color_picker_favorite5' => false,
        'body_color' => false,
        'color_picker_favorite6' => false,
        'background_image' => false,
        'email_body_width' => false,
        'secondary_font' => false,
        'primary_accent_color' => false,
        'color_picker_favorite3' => false,
        'primary_font_line_height' => false,
        'color_picker_favorite4' => false,
        'secondary_font_color' => false,
        'color_picker_favorite1' => false,
        'color_picker_favorite2' => false,
        'body_border_color' => false,
        'body_border_width' => false,
        'links_font' => false,
        'background_color' => false,
        'background_image_type' => false,
        'divider_style_settings' => false,
        'secondary_accent_color' => false,
        'secondary_font_line_height' => false,
        'primary_font_size' => false,
        'secondary_font_size' => false,
        'primary_font_color' => false,
        'heading_one_font' => false,
        'primary_font' => false,
        'heading_two_font' => false,
        'button_style_settings' => false,
        'body_border_color_choice' => 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 = [
        'email_body_padding' => 'emailBodyPadding',
        'color_picker_favorite5' => 'colorPickerFavorite5',
        'body_color' => 'bodyColor',
        'color_picker_favorite6' => 'colorPickerFavorite6',
        'background_image' => 'backgroundImage',
        'email_body_width' => 'emailBodyWidth',
        'secondary_font' => 'secondaryFont',
        'primary_accent_color' => 'primaryAccentColor',
        'color_picker_favorite3' => 'colorPickerFavorite3',
        'primary_font_line_height' => 'primaryFontLineHeight',
        'color_picker_favorite4' => 'colorPickerFavorite4',
        'secondary_font_color' => 'secondaryFontColor',
        'color_picker_favorite1' => 'colorPickerFavorite1',
        'color_picker_favorite2' => 'colorPickerFavorite2',
        'body_border_color' => 'bodyBorderColor',
        'body_border_width' => 'bodyBorderWidth',
        'links_font' => 'linksFont',
        'background_color' => 'backgroundColor',
        'background_image_type' => 'backgroundImageType',
        'divider_style_settings' => 'dividerStyleSettings',
        'secondary_accent_color' => 'secondaryAccentColor',
        'secondary_font_line_height' => 'secondaryFontLineHeight',
        'primary_font_size' => 'primaryFontSize',
        'secondary_font_size' => 'secondaryFontSize',
        'primary_font_color' => 'primaryFontColor',
        'heading_one_font' => 'headingOneFont',
        'primary_font' => 'primaryFont',
        'heading_two_font' => 'headingTwoFont',
        'button_style_settings' => 'buttonStyleSettings',
        'body_border_color_choice' => 'bodyBorderColorChoice'
    ];

    /**
     * Array of attributes to setter functions (for deserialization of responses)
     *
     * @var string[]
     */
    protected static $setters = [
        'email_body_padding' => 'setEmailBodyPadding',
        'color_picker_favorite5' => 'setColorPickerFavorite5',
        'body_color' => 'setBodyColor',
        'color_picker_favorite6' => 'setColorPickerFavorite6',
        'background_image' => 'setBackgroundImage',
        'email_body_width' => 'setEmailBodyWidth',
        'secondary_font' => 'setSecondaryFont',
        'primary_accent_color' => 'setPrimaryAccentColor',
        'color_picker_favorite3' => 'setColorPickerFavorite3',
        'primary_font_line_height' => 'setPrimaryFontLineHeight',
        'color_picker_favorite4' => 'setColorPickerFavorite4',
        'secondary_font_color' => 'setSecondaryFontColor',
        'color_picker_favorite1' => 'setColorPickerFavorite1',
        'color_picker_favorite2' => 'setColorPickerFavorite2',
        'body_border_color' => 'setBodyBorderColor',
        'body_border_width' => 'setBodyBorderWidth',
        'links_font' => 'setLinksFont',
        'background_color' => 'setBackgroundColor',
        'background_image_type' => 'setBackgroundImageType',
        'divider_style_settings' => 'setDividerStyleSettings',
        'secondary_accent_color' => 'setSecondaryAccentColor',
        'secondary_font_line_height' => 'setSecondaryFontLineHeight',
        'primary_font_size' => 'setPrimaryFontSize',
        'secondary_font_size' => 'setSecondaryFontSize',
        'primary_font_color' => 'setPrimaryFontColor',
        'heading_one_font' => 'setHeadingOneFont',
        'primary_font' => 'setPrimaryFont',
        'heading_two_font' => 'setHeadingTwoFont',
        'button_style_settings' => 'setButtonStyleSettings',
        'body_border_color_choice' => 'setBodyBorderColorChoice'
    ];

    /**
     * Array of attributes to getter functions (for serialization of requests)
     *
     * @var string[]
     */
    protected static $getters = [
        'email_body_padding' => 'getEmailBodyPadding',
        'color_picker_favorite5' => 'getColorPickerFavorite5',
        'body_color' => 'getBodyColor',
        'color_picker_favorite6' => 'getColorPickerFavorite6',
        'background_image' => 'getBackgroundImage',
        'email_body_width' => 'getEmailBodyWidth',
        'secondary_font' => 'getSecondaryFont',
        'primary_accent_color' => 'getPrimaryAccentColor',
        'color_picker_favorite3' => 'getColorPickerFavorite3',
        'primary_font_line_height' => 'getPrimaryFontLineHeight',
        'color_picker_favorite4' => 'getColorPickerFavorite4',
        'secondary_font_color' => 'getSecondaryFontColor',
        'color_picker_favorite1' => 'getColorPickerFavorite1',
        'color_picker_favorite2' => 'getColorPickerFavorite2',
        'body_border_color' => 'getBodyBorderColor',
        'body_border_width' => 'getBodyBorderWidth',
        'links_font' => 'getLinksFont',
        'background_color' => 'getBackgroundColor',
        'background_image_type' => 'getBackgroundImageType',
        'divider_style_settings' => 'getDividerStyleSettings',
        'secondary_accent_color' => 'getSecondaryAccentColor',
        'secondary_font_line_height' => 'getSecondaryFontLineHeight',
        'primary_font_size' => 'getPrimaryFontSize',
        'secondary_font_size' => 'getSecondaryFontSize',
        'primary_font_color' => 'getPrimaryFontColor',
        'heading_one_font' => 'getHeadingOneFont',
        'primary_font' => 'getPrimaryFont',
        'heading_two_font' => 'getHeadingTwoFont',
        'button_style_settings' => 'getButtonStyleSettings',
        'body_border_color_choice' => 'getBodyBorderColorChoice'
    ];

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


    /**
     * 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('email_body_padding', $data ?? [], null);
        $this->setIfExists('color_picker_favorite5', $data ?? [], null);
        $this->setIfExists('body_color', $data ?? [], null);
        $this->setIfExists('color_picker_favorite6', $data ?? [], null);
        $this->setIfExists('background_image', $data ?? [], null);
        $this->setIfExists('email_body_width', $data ?? [], null);
        $this->setIfExists('secondary_font', $data ?? [], null);
        $this->setIfExists('primary_accent_color', $data ?? [], null);
        $this->setIfExists('color_picker_favorite3', $data ?? [], null);
        $this->setIfExists('primary_font_line_height', $data ?? [], null);
        $this->setIfExists('color_picker_favorite4', $data ?? [], null);
        $this->setIfExists('secondary_font_color', $data ?? [], null);
        $this->setIfExists('color_picker_favorite1', $data ?? [], null);
        $this->setIfExists('color_picker_favorite2', $data ?? [], null);
        $this->setIfExists('body_border_color', $data ?? [], null);
        $this->setIfExists('body_border_width', $data ?? [], null);
        $this->setIfExists('links_font', $data ?? [], null);
        $this->setIfExists('background_color', $data ?? [], null);
        $this->setIfExists('background_image_type', $data ?? [], null);
        $this->setIfExists('divider_style_settings', $data ?? [], null);
        $this->setIfExists('secondary_accent_color', $data ?? [], null);
        $this->setIfExists('secondary_font_line_height', $data ?? [], null);
        $this->setIfExists('primary_font_size', $data ?? [], null);
        $this->setIfExists('secondary_font_size', $data ?? [], null);
        $this->setIfExists('primary_font_color', $data ?? [], null);
        $this->setIfExists('heading_one_font', $data ?? [], null);
        $this->setIfExists('primary_font', $data ?? [], null);
        $this->setIfExists('heading_two_font', $data ?? [], null);
        $this->setIfExists('button_style_settings', $data ?? [], null);
        $this->setIfExists('body_border_color_choice', $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 = [];

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

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


