<?php
/**
 * EventFilter
 *
 * PHP version 7.3
 *
 * @category Class
 * @package  SellingPartnerApi
 */

/**
 * Selling Partner API for Notifications
 *
 * The Selling Partner API for Notifications lets you subscribe to notifications that are relevant to a selling partner's business. Using this API you can create a destination to receive notifications, subscribe to notifications, delete notification subscriptions, and more. For more information, see the [Notifications Use Case Guide](https://developer-docs.amazon.com/sp-api/docs/notifications-api-v1-use-case-guide).
 *
 * The version of the OpenAPI document: v1
 * 
 * Generated by: https://openapi-generator.tech
 * OpenAPI Generator version: 5.0.1
 */

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

namespace SellingPartnerApi\Model\NotificationsV1;
use ArrayAccess;
use SellingPartnerApi\Model\BaseModel;
use SellingPartnerApi\Model\ModelInterface;
use SellingPartnerApi\ObjectSerializer;

/**
 * EventFilter Class Doc Comment
 *
 * @category Class
 * @description A notificationType specific filter. This object contains all of the currently available filters and properties that you can use to define a notificationType specific filter.
 * @package  SellingPartnerApi
 * @group 
 * @implements \ArrayAccess<TKey, TValue>
 * @template TKey int|null
 * @template TValue mixed|null  
 */
class EventFilter extends BaseModel implements ModelInterface, ArrayAccess, \JsonSerializable, \IteratorAggregate
{
    public const DISCRIMINATOR = null;

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

    /**
      * Array of property to type mappings. Used for (de)serialization
      *
      * @var string[]
      */
    protected static $openAPITypes = [
        'aggregation_settings' => '\SellingPartnerApi\Model\NotificationsV1\AggregationSettings',
        'marketplace_ids' => 'string[]',
        'event_filter_type' => '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 = [
        'aggregation_settings' => null,
        'marketplace_ids' => null,
        'event_filter_type' => null
    ];



    /**
     * Array of attributes where the key is the local name,
     * and the value is the original name
     *
     * @var string[]
     */
    protected static $attributeMap = [
        'aggregation_settings' => 'aggregationSettings',
        'marketplace_ids' => 'marketplaceIds',
        'event_filter_type' => 'eventFilterType'
    ];

    /**
     * Array of attributes to setter functions (for deserialization of responses)
     *
     * @var string[]
     */
    protected static $setters = [
        'aggregation_settings' => 'setAggregationSettings',
        'marketplace_ids' => 'setMarketplaceIds',
        'event_filter_type' => 'setEventFilterType'
    ];

    /**
     * Array of attributes to getter functions (for serialization of requests)
     *
     * @var string[]
     */
    protected static $getters = [
        'aggregation_settings' => 'getAggregationSettings',
        'marketplace_ids' => 'getMarketplaceIds',
        'event_filter_type' => 'getEventFilterType'
    ];


    
    /**
     * 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['aggregation_settings'] = $data['aggregation_settings'] ?? null;
        $this->container['marketplace_ids'] = $data['marketplace_ids'] ?? null;
        $this->container['event_filter_type'] = $data['event_filter_type'] ?? null;
    }

    /**
     * Show all the invalid properties with reasons.
     *
     * @return array invalid properties with reasons
     */
    public function listInvalidProperties()
    {
        $invalidProperties = [];
        if ($this->container['event_filter_type'] === null) {
            $invalidProperties[] = "'event_filter_type' can't be null";
        }
        return $invalidProperties;
    }


    /**
     * Gets aggregation_settings
     *
     * @return \SellingPartnerApi\Model\NotificationsV1\AggregationSettings|null
     */
    public function getAggregationSettings()
    {
        return $this->container['aggregation_settings'];
    }

    /**
     * Sets aggregation_settings
     *
     * @param \SellingPartnerApi\Model\NotificationsV1\AggregationSettings|null $aggregation_settings aggregation_settings
     *
     * @return self
     */
    public function setAggregationSettings($aggregation_settings)
    {
        $this->container['aggregation_settings'] = $aggregation_settings;

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

    /**
     * Sets marketplace_ids
     *
     * @param string[]|null $marketplace_ids A list of marketplace identifiers to subscribe to (e.g. ATVPDKIKX0DER). To receive notifications in every marketplace, do not provide this list.
     *
     * @return self
     */
    public function setMarketplaceIds($marketplace_ids)
    {
        $this->container['marketplace_ids'] = $marketplace_ids;

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

    /**
     * Sets event_filter_type
     *
     * @param string $event_filter_type An eventFilterType value that is supported by the specific notificationType. This is used by the subscription service to determine the type of event filter. Refer to the section of the [Notifications Use Case Guide](https://developer-docs.amazon.com/sp-api/docs/notifications-api-v1-use-case-guide) that describes the specific notificationType to determine if an eventFilterType is supported.
     *
     * @return self
     */
    public function setEventFilterType($event_filter_type)
    {
        $this->container['event_filter_type'] = $event_filter_type;

        return $this;
    }
}


