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

/**
 * Magento Community
 *
 * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
 *
 * The version of the OpenAPI document: 2.3
 * Generated by: https://openapi-generator.tech
 * OpenAPI Generator version: 6.0.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 Magento2\Model;

use \ArrayAccess;
use \Magento2\ObjectSerializer;

/**
 * CatalogDataCategoryAttributeInterface Class Doc Comment
 *
 * @category Class
 * @description 
 * @package  Magento2
 * @author   OpenAPI Generator team
 * @link     https://openapi-generator.tech
 * @implements \ArrayAccess<TKey, TValue>
 * @template TKey int|null
 * @template TValue mixed|null
 */
class CatalogDataCategoryAttributeInterface implements ModelInterface, ArrayAccess, \JsonSerializable
{
    public const DISCRIMINATOR = null;

    /**
      * The original name of the model.
      *
      * @var string
      */
    protected static $openAPIModelName = 'catalog-data-category-attribute-interface';

    /**
      * Array of property to type mappings. Used for (de)serialization
      *
      * @var string[]
      */
    protected static $openAPITypes = [
        'is_wysiwyg_enabled' => 'bool',
        'is_html_allowed_on_front' => 'bool',
        'used_for_sort_by' => 'bool',
        'is_filterable' => 'bool',
        'is_filterable_in_search' => 'bool',
        'is_used_in_grid' => 'bool',
        'is_visible_in_grid' => 'bool',
        'is_filterable_in_grid' => 'bool',
        'position' => 'int',
        'apply_to' => 'string[]',
        'is_searchable' => 'string',
        'is_visible_in_advanced_search' => 'string',
        'is_comparable' => 'string',
        'is_used_for_promo_rules' => 'string',
        'is_visible_on_front' => 'string',
        'used_in_product_listing' => 'string',
        'is_visible' => 'bool',
        'scope' => 'string',
        'extension_attributes' => 'object',
        'attribute_id' => 'int',
        'attribute_code' => 'string',
        'frontend_input' => 'string',
        'entity_type_id' => 'string',
        'is_required' => 'bool',
        'options' => '\Magento2\Model\EavDataAttributeOptionInterface[]',
        'is_user_defined' => 'bool',
        'default_frontend_label' => 'string',
        'frontend_labels' => '\Magento2\Model\EavDataAttributeFrontendLabelInterface[]',
        'note' => 'string',
        'backend_type' => 'string',
        'backend_model' => 'string',
        'source_model' => 'string',
        'default_value' => 'string',
        'is_unique' => 'string',
        'frontend_class' => 'string',
        'validation_rules' => '\Magento2\Model\EavDataAttributeValidationRuleInterface[]',
        'custom_attributes' => '\Magento2\Model\FrameworkAttributeInterface[]'
    ];

    /**
      * 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 = [
        'is_wysiwyg_enabled' => null,
        'is_html_allowed_on_front' => null,
        'used_for_sort_by' => null,
        'is_filterable' => null,
        'is_filterable_in_search' => null,
        'is_used_in_grid' => null,
        'is_visible_in_grid' => null,
        'is_filterable_in_grid' => null,
        'position' => null,
        'apply_to' => null,
        'is_searchable' => null,
        'is_visible_in_advanced_search' => null,
        'is_comparable' => null,
        'is_used_for_promo_rules' => null,
        'is_visible_on_front' => null,
        'used_in_product_listing' => null,
        'is_visible' => null,
        'scope' => null,
        'extension_attributes' => null,
        'attribute_id' => null,
        'attribute_code' => null,
        'frontend_input' => null,
        'entity_type_id' => null,
        'is_required' => null,
        'options' => null,
        'is_user_defined' => null,
        'default_frontend_label' => null,
        'frontend_labels' => null,
        'note' => null,
        'backend_type' => null,
        'backend_model' => null,
        'source_model' => null,
        'default_value' => null,
        'is_unique' => null,
        'frontend_class' => null,
        'validation_rules' => null,
        'custom_attributes' => null
    ];

    /**
     * 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 attributes where the key is the local name,
     * and the value is the original name
     *
     * @var string[]
     */
    protected static $attributeMap = [
        'is_wysiwyg_enabled' => 'is_wysiwyg_enabled',
        'is_html_allowed_on_front' => 'is_html_allowed_on_front',
        'used_for_sort_by' => 'used_for_sort_by',
        'is_filterable' => 'is_filterable',
        'is_filterable_in_search' => 'is_filterable_in_search',
        'is_used_in_grid' => 'is_used_in_grid',
        'is_visible_in_grid' => 'is_visible_in_grid',
        'is_filterable_in_grid' => 'is_filterable_in_grid',
        'position' => 'position',
        'apply_to' => 'apply_to',
        'is_searchable' => 'is_searchable',
        'is_visible_in_advanced_search' => 'is_visible_in_advanced_search',
        'is_comparable' => 'is_comparable',
        'is_used_for_promo_rules' => 'is_used_for_promo_rules',
        'is_visible_on_front' => 'is_visible_on_front',
        'used_in_product_listing' => 'used_in_product_listing',
        'is_visible' => 'is_visible',
        'scope' => 'scope',
        'extension_attributes' => 'extension_attributes',
        'attribute_id' => 'attribute_id',
        'attribute_code' => 'attribute_code',
        'frontend_input' => 'frontend_input',
        'entity_type_id' => 'entity_type_id',
        'is_required' => 'is_required',
        'options' => 'options',
        'is_user_defined' => 'is_user_defined',
        'default_frontend_label' => 'default_frontend_label',
        'frontend_labels' => 'frontend_labels',
        'note' => 'note',
        'backend_type' => 'backend_type',
        'backend_model' => 'backend_model',
        'source_model' => 'source_model',
        'default_value' => 'default_value',
        'is_unique' => 'is_unique',
        'frontend_class' => 'frontend_class',
        'validation_rules' => 'validation_rules',
        'custom_attributes' => 'custom_attributes'
    ];

    /**
     * Array of attributes to setter functions (for deserialization of responses)
     *
     * @var string[]
     */
    protected static $setters = [
        'is_wysiwyg_enabled' => 'setIsWysiwygEnabled',
        'is_html_allowed_on_front' => 'setIsHtmlAllowedOnFront',
        'used_for_sort_by' => 'setUsedForSortBy',
        'is_filterable' => 'setIsFilterable',
        'is_filterable_in_search' => 'setIsFilterableInSearch',
        'is_used_in_grid' => 'setIsUsedInGrid',
        'is_visible_in_grid' => 'setIsVisibleInGrid',
        'is_filterable_in_grid' => 'setIsFilterableInGrid',
        'position' => 'setPosition',
        'apply_to' => 'setApplyTo',
        'is_searchable' => 'setIsSearchable',
        'is_visible_in_advanced_search' => 'setIsVisibleInAdvancedSearch',
        'is_comparable' => 'setIsComparable',
        'is_used_for_promo_rules' => 'setIsUsedForPromoRules',
        'is_visible_on_front' => 'setIsVisibleOnFront',
        'used_in_product_listing' => 'setUsedInProductListing',
        'is_visible' => 'setIsVisible',
        'scope' => 'setScope',
        'extension_attributes' => 'setExtensionAttributes',
        'attribute_id' => 'setAttributeId',
        'attribute_code' => 'setAttributeCode',
        'frontend_input' => 'setFrontendInput',
        'entity_type_id' => 'setEntityTypeId',
        'is_required' => 'setIsRequired',
        'options' => 'setOptions',
        'is_user_defined' => 'setIsUserDefined',
        'default_frontend_label' => 'setDefaultFrontendLabel',
        'frontend_labels' => 'setFrontendLabels',
        'note' => 'setNote',
        'backend_type' => 'setBackendType',
        'backend_model' => 'setBackendModel',
        'source_model' => 'setSourceModel',
        'default_value' => 'setDefaultValue',
        'is_unique' => 'setIsUnique',
        'frontend_class' => 'setFrontendClass',
        'validation_rules' => 'setValidationRules',
        'custom_attributes' => 'setCustomAttributes'
    ];

    /**
     * Array of attributes to getter functions (for serialization of requests)
     *
     * @var string[]
     */
    protected static $getters = [
        'is_wysiwyg_enabled' => 'getIsWysiwygEnabled',
        'is_html_allowed_on_front' => 'getIsHtmlAllowedOnFront',
        'used_for_sort_by' => 'getUsedForSortBy',
        'is_filterable' => 'getIsFilterable',
        'is_filterable_in_search' => 'getIsFilterableInSearch',
        'is_used_in_grid' => 'getIsUsedInGrid',
        'is_visible_in_grid' => 'getIsVisibleInGrid',
        'is_filterable_in_grid' => 'getIsFilterableInGrid',
        'position' => 'getPosition',
        'apply_to' => 'getApplyTo',
        'is_searchable' => 'getIsSearchable',
        'is_visible_in_advanced_search' => 'getIsVisibleInAdvancedSearch',
        'is_comparable' => 'getIsComparable',
        'is_used_for_promo_rules' => 'getIsUsedForPromoRules',
        'is_visible_on_front' => 'getIsVisibleOnFront',
        'used_in_product_listing' => 'getUsedInProductListing',
        'is_visible' => 'getIsVisible',
        'scope' => 'getScope',
        'extension_attributes' => 'getExtensionAttributes',
        'attribute_id' => 'getAttributeId',
        'attribute_code' => 'getAttributeCode',
        'frontend_input' => 'getFrontendInput',
        'entity_type_id' => 'getEntityTypeId',
        'is_required' => 'getIsRequired',
        'options' => 'getOptions',
        'is_user_defined' => 'getIsUserDefined',
        'default_frontend_label' => 'getDefaultFrontendLabel',
        'frontend_labels' => 'getFrontendLabels',
        'note' => 'getNote',
        'backend_type' => 'getBackendType',
        'backend_model' => 'getBackendModel',
        'source_model' => 'getSourceModel',
        'default_value' => 'getDefaultValue',
        'is_unique' => 'getIsUnique',
        'frontend_class' => 'getFrontendClass',
        'validation_rules' => 'getValidationRules',
        'custom_attributes' => 'getCustomAttributes'
    ];

    /**
     * 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[] $data Associated array of property values
     *                      initializing the model
     */
    public function __construct(array $data = null)
    {
        $this->container['is_wysiwyg_enabled'] = $data['is_wysiwyg_enabled'] ?? null;
        $this->container['is_html_allowed_on_front'] = $data['is_html_allowed_on_front'] ?? null;
        $this->container['used_for_sort_by'] = $data['used_for_sort_by'] ?? null;
        $this->container['is_filterable'] = $data['is_filterable'] ?? null;
        $this->container['is_filterable_in_search'] = $data['is_filterable_in_search'] ?? null;
        $this->container['is_used_in_grid'] = $data['is_used_in_grid'] ?? null;
        $this->container['is_visible_in_grid'] = $data['is_visible_in_grid'] ?? null;
        $this->container['is_filterable_in_grid'] = $data['is_filterable_in_grid'] ?? null;
        $this->container['position'] = $data['position'] ?? null;
        $this->container['apply_to'] = $data['apply_to'] ?? null;
        $this->container['is_searchable'] = $data['is_searchable'] ?? null;
        $this->container['is_visible_in_advanced_search'] = $data['is_visible_in_advanced_search'] ?? null;
        $this->container['is_comparable'] = $data['is_comparable'] ?? null;
        $this->container['is_used_for_promo_rules'] = $data['is_used_for_promo_rules'] ?? null;
        $this->container['is_visible_on_front'] = $data['is_visible_on_front'] ?? null;
        $this->container['used_in_product_listing'] = $data['used_in_product_listing'] ?? null;
        $this->container['is_visible'] = $data['is_visible'] ?? null;
        $this->container['scope'] = $data['scope'] ?? null;
        $this->container['extension_attributes'] = $data['extension_attributes'] ?? null;
        $this->container['attribute_id'] = $data['attribute_id'] ?? null;
        $this->container['attribute_code'] = $data['attribute_code'] ?? null;
        $this->container['frontend_input'] = $data['frontend_input'] ?? null;
        $this->container['entity_type_id'] = $data['entity_type_id'] ?? null;
        $this->container['is_required'] = $data['is_required'] ?? null;
        $this->container['options'] = $data['options'] ?? null;
        $this->container['is_user_defined'] = $data['is_user_defined'] ?? null;
        $this->container['default_frontend_label'] = $data['default_frontend_label'] ?? null;
        $this->container['frontend_labels'] = $data['frontend_labels'] ?? null;
        $this->container['note'] = $data['note'] ?? null;
        $this->container['backend_type'] = $data['backend_type'] ?? null;
        $this->container['backend_model'] = $data['backend_model'] ?? null;
        $this->container['source_model'] = $data['source_model'] ?? null;
        $this->container['default_value'] = $data['default_value'] ?? null;
        $this->container['is_unique'] = $data['is_unique'] ?? null;
        $this->container['frontend_class'] = $data['frontend_class'] ?? null;
        $this->container['validation_rules'] = $data['validation_rules'] ?? null;
        $this->container['custom_attributes'] = $data['custom_attributes'] ?? null;
    }

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

        if ($this->container['attribute_code'] === null) {
            $invalidProperties[] = "'attribute_code' can't be null";
        }
        if ($this->container['frontend_input'] === null) {
            $invalidProperties[] = "'frontend_input' can't be null";
        }
        if ($this->container['entity_type_id'] === null) {
            $invalidProperties[] = "'entity_type_id' can't be null";
        }
        if ($this->container['is_required'] === null) {
            $invalidProperties[] = "'is_required' can't be null";
        }
        if ($this->container['frontend_labels'] === null) {
            $invalidProperties[] = "'frontend_labels' 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 is_wysiwyg_enabled
     *
     * @return bool|null
     */
    public function getIsWysiwygEnabled()
    {
        return $this->container['is_wysiwyg_enabled'];
    }

    /**
     * Sets is_wysiwyg_enabled
     *
     * @param bool|null $is_wysiwyg_enabled WYSIWYG flag
     *
     * @return self
     */
    public function setIsWysiwygEnabled($is_wysiwyg_enabled)
    {
        $this->container['is_wysiwyg_enabled'] = $is_wysiwyg_enabled;

        return $this;
    }

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

    /**
     * Sets is_html_allowed_on_front
     *
     * @param bool|null $is_html_allowed_on_front The HTML tags are allowed on the frontend
     *
     * @return self
     */
    public function setIsHtmlAllowedOnFront($is_html_allowed_on_front)
    {
        $this->container['is_html_allowed_on_front'] = $is_html_allowed_on_front;

        return $this;
    }

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

    /**
     * Sets used_for_sort_by
     *
     * @param bool|null $used_for_sort_by It is used for sorting in product listing
     *
     * @return self
     */
    public function setUsedForSortBy($used_for_sort_by)
    {
        $this->container['used_for_sort_by'] = $used_for_sort_by;

        return $this;
    }

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

    /**
     * Sets is_filterable
     *
     * @param bool|null $is_filterable It used in layered navigation
     *
     * @return self
     */
    public function setIsFilterable($is_filterable)
    {
        $this->container['is_filterable'] = $is_filterable;

        return $this;
    }

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

    /**
     * Sets is_filterable_in_search
     *
     * @param bool|null $is_filterable_in_search It is used in search results layered navigation
     *
     * @return self
     */
    public function setIsFilterableInSearch($is_filterable_in_search)
    {
        $this->container['is_filterable_in_search'] = $is_filterable_in_search;

        return $this;
    }

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

    /**
     * Sets is_used_in_grid
     *
     * @param bool|null $is_used_in_grid It is used in catalog product grid
     *
     * @return self
     */
    public function setIsUsedInGrid($is_used_in_grid)
    {
        $this->container['is_used_in_grid'] = $is_used_in_grid;

        return $this;
    }

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

    /**
     * Sets is_visible_in_grid
     *
     * @param bool|null $is_visible_in_grid It is visible in catalog product grid
     *
     * @return self
     */
    public function setIsVisibleInGrid($is_visible_in_grid)
    {
        $this->container['is_visible_in_grid'] = $is_visible_in_grid;

        return $this;
    }

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

    /**
     * Sets is_filterable_in_grid
     *
     * @param bool|null $is_filterable_in_grid It is filterable in catalog product grid
     *
     * @return self
     */
    public function setIsFilterableInGrid($is_filterable_in_grid)
    {
        $this->container['is_filterable_in_grid'] = $is_filterable_in_grid;

        return $this;
    }

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

    /**
     * Sets position
     *
     * @param int|null $position Position
     *
     * @return self
     */
    public function setPosition($position)
    {
        $this->container['position'] = $position;

        return $this;
    }

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

    /**
     * Sets apply_to
     *
     * @param string[]|null $apply_to Apply to value for the element
     *
     * @return self
     */
    public function setApplyTo($apply_to)
    {
        $this->container['apply_to'] = $apply_to;

        return $this;
    }

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

    /**
     * Sets is_searchable
     *
     * @param string|null $is_searchable The attribute can be used in Quick Search
     *
     * @return self
     */
    public function setIsSearchable($is_searchable)
    {
        $this->container['is_searchable'] = $is_searchable;

        return $this;
    }

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

    /**
     * Sets is_visible_in_advanced_search
     *
     * @param string|null $is_visible_in_advanced_search The attribute can be used in Advanced Search
     *
     * @return self
     */
    public function setIsVisibleInAdvancedSearch($is_visible_in_advanced_search)
    {
        $this->container['is_visible_in_advanced_search'] = $is_visible_in_advanced_search;

        return $this;
    }

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

    /**
     * Sets is_comparable
     *
     * @param string|null $is_comparable The attribute can be compared on the frontend
     *
     * @return self
     */
    public function setIsComparable($is_comparable)
    {
        $this->container['is_comparable'] = $is_comparable;

        return $this;
    }

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

    /**
     * Sets is_used_for_promo_rules
     *
     * @param string|null $is_used_for_promo_rules The attribute can be used for promo rules
     *
     * @return self
     */
    public function setIsUsedForPromoRules($is_used_for_promo_rules)
    {
        $this->container['is_used_for_promo_rules'] = $is_used_for_promo_rules;

        return $this;
    }

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

    /**
     * Sets is_visible_on_front
     *
     * @param string|null $is_visible_on_front The attribute is visible on the frontend
     *
     * @return self
     */
    public function setIsVisibleOnFront($is_visible_on_front)
    {
        $this->container['is_visible_on_front'] = $is_visible_on_front;

        return $this;
    }

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

    /**
     * Sets used_in_product_listing
     *
     * @param string|null $used_in_product_listing The attribute can be used in product listing
     *
     * @return self
     */
    public function setUsedInProductListing($used_in_product_listing)
    {
        $this->container['used_in_product_listing'] = $used_in_product_listing;

        return $this;
    }

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

    /**
     * Sets is_visible
     *
     * @param bool|null $is_visible Attribute is visible on frontend.
     *
     * @return self
     */
    public function setIsVisible($is_visible)
    {
        $this->container['is_visible'] = $is_visible;

        return $this;
    }

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

    /**
     * Sets scope
     *
     * @param string|null $scope Attribute scope
     *
     * @return self
     */
    public function setScope($scope)
    {
        $this->container['scope'] = $scope;

        return $this;
    }

    /**
     * Gets extension_attributes
     *
     * @return object|null
     */
    public function getExtensionAttributes()
    {
        return $this->container['extension_attributes'];
    }

    /**
     * Sets extension_attributes
     *
     * @param object|null $extension_attributes ExtensionInterface class for @see \\Magento\\Catalog\\Api\\Data\\EavAttributeInterface
     *
     * @return self
     */
    public function setExtensionAttributes($extension_attributes)
    {
        $this->container['extension_attributes'] = $extension_attributes;

        return $this;
    }

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

    /**
     * Sets attribute_id
     *
     * @param int|null $attribute_id Id of the attribute.
     *
     * @return self
     */
    public function setAttributeId($attribute_id)
    {
        $this->container['attribute_id'] = $attribute_id;

        return $this;
    }

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

    /**
     * Sets attribute_code
     *
     * @param string $attribute_code Code of the attribute.
     *
     * @return self
     */
    public function setAttributeCode($attribute_code)
    {
        $this->container['attribute_code'] = $attribute_code;

        return $this;
    }

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

    /**
     * Sets frontend_input
     *
     * @param string $frontend_input HTML for input element.
     *
     * @return self
     */
    public function setFrontendInput($frontend_input)
    {
        $this->container['frontend_input'] = $frontend_input;

        return $this;
    }

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

    /**
     * Sets entity_type_id
     *
     * @param string $entity_type_id Entity type id
     *
     * @return self
     */
    public function setEntityTypeId($entity_type_id)
    {
        $this->container['entity_type_id'] = $entity_type_id;

        return $this;
    }

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

    /**
     * Sets is_required
     *
     * @param bool $is_required Attribute is required.
     *
     * @return self
     */
    public function setIsRequired($is_required)
    {
        $this->container['is_required'] = $is_required;

        return $this;
    }

    /**
     * Gets options
     *
     * @return \Magento2\Model\EavDataAttributeOptionInterface[]|null
     */
    public function getOptions()
    {
        return $this->container['options'];
    }

    /**
     * Sets options
     *
     * @param \Magento2\Model\EavDataAttributeOptionInterface[]|null $options Options of the attribute (key => value pairs for select)
     *
     * @return self
     */
    public function setOptions($options)
    {
        $this->container['options'] = $options;

        return $this;
    }

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

    /**
     * Sets is_user_defined
     *
     * @param bool|null $is_user_defined Current attribute has been defined by a user.
     *
     * @return self
     */
    public function setIsUserDefined($is_user_defined)
    {
        $this->container['is_user_defined'] = $is_user_defined;

        return $this;
    }

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

    /**
     * Sets default_frontend_label
     *
     * @param string|null $default_frontend_label Frontend label for default store
     *
     * @return self
     */
    public function setDefaultFrontendLabel($default_frontend_label)
    {
        $this->container['default_frontend_label'] = $default_frontend_label;

        return $this;
    }

    /**
     * Gets frontend_labels
     *
     * @return \Magento2\Model\EavDataAttributeFrontendLabelInterface[]
     */
    public function getFrontendLabels()
    {
        return $this->container['frontend_labels'];
    }

    /**
     * Sets frontend_labels
     *
     * @param \Magento2\Model\EavDataAttributeFrontendLabelInterface[] $frontend_labels Frontend label for each store
     *
     * @return self
     */
    public function setFrontendLabels($frontend_labels)
    {
        $this->container['frontend_labels'] = $frontend_labels;

        return $this;
    }

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

    /**
     * Sets note
     *
     * @param string|null $note The note attribute for the element.
     *
     * @return self
     */
    public function setNote($note)
    {
        $this->container['note'] = $note;

        return $this;
    }

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

    /**
     * Sets backend_type
     *
     * @param string|null $backend_type Backend type.
     *
     * @return self
     */
    public function setBackendType($backend_type)
    {
        $this->container['backend_type'] = $backend_type;

        return $this;
    }

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

    /**
     * Sets backend_model
     *
     * @param string|null $backend_model Backend model
     *
     * @return self
     */
    public function setBackendModel($backend_model)
    {
        $this->container['backend_model'] = $backend_model;

        return $this;
    }

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

    /**
     * Sets source_model
     *
     * @param string|null $source_model Source model
     *
     * @return self
     */
    public function setSourceModel($source_model)
    {
        $this->container['source_model'] = $source_model;

        return $this;
    }

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

    /**
     * Sets default_value
     *
     * @param string|null $default_value Default value for the element.
     *
     * @return self
     */
    public function setDefaultValue($default_value)
    {
        $this->container['default_value'] = $default_value;

        return $this;
    }

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

    /**
     * Sets is_unique
     *
     * @param string|null $is_unique This is a unique attribute
     *
     * @return self
     */
    public function setIsUnique($is_unique)
    {
        $this->container['is_unique'] = $is_unique;

        return $this;
    }

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

    /**
     * Sets frontend_class
     *
     * @param string|null $frontend_class Frontend class of attribute
     *
     * @return self
     */
    public function setFrontendClass($frontend_class)
    {
        $this->container['frontend_class'] = $frontend_class;

        return $this;
    }

    /**
     * Gets validation_rules
     *
     * @return \Magento2\Model\EavDataAttributeValidationRuleInterface[]|null
     */
    public function getValidationRules()
    {
        return $this->container['validation_rules'];
    }

    /**
     * Sets validation_rules
     *
     * @param \Magento2\Model\EavDataAttributeValidationRuleInterface[]|null $validation_rules Validation rules.
     *
     * @return self
     */
    public function setValidationRules($validation_rules)
    {
        $this->container['validation_rules'] = $validation_rules;

        return $this;
    }

    /**
     * Gets custom_attributes
     *
     * @return \Magento2\Model\FrameworkAttributeInterface[]|null
     */
    public function getCustomAttributes()
    {
        return $this->container['custom_attributes'];
    }

    /**
     * Sets custom_attributes
     *
     * @param \Magento2\Model\FrameworkAttributeInterface[]|null $custom_attributes Custom attributes values.
     *
     * @return self
     */
    public function setCustomAttributes($custom_attributes)
    {
        $this->container['custom_attributes'] = $custom_attributes;

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


