# coding: utf-8

from __future__ import absolute_import
from datetime import date, datetime  # noqa: F401

from typing import List, Dict  # noqa: F401

from capif_routing_info.models.base_model_ import Model
from capif_routing_info.models.data_format import DataFormat
from capif_routing_info.models.interface_description import InterfaceDescription
from capif_routing_info.models.protocol import Protocol
from capif_routing_info.models.security_method import SecurityMethod
from capif_routing_info.models.version import Version
from capif_routing_info import util

from capif_routing_info.models.data_format import DataFormat  # noqa: E501
from capif_routing_info.models.interface_description import InterfaceDescription  # noqa: E501
from capif_routing_info.models.protocol import Protocol  # noqa: E501
from capif_routing_info.models.security_method import SecurityMethod  # noqa: E501
from capif_routing_info.models.version import Version  # noqa: E501

class AefProfile(Model):
    """NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).

    Do not edit the class manually.
    """

    def __init__(self, aef_id=None, versions=None, protocol=None, data_format=None, security_methods=None, domain_name=None, interface_descriptions=None):  # noqa: E501
        """AefProfile - a model defined in OpenAPI

        :param aef_id: The aef_id of this AefProfile.  # noqa: E501
        :type aef_id: str
        :param versions: The versions of this AefProfile.  # noqa: E501
        :type versions: List[Version]
        :param protocol: The protocol of this AefProfile.  # noqa: E501
        :type protocol: Protocol
        :param data_format: The data_format of this AefProfile.  # noqa: E501
        :type data_format: DataFormat
        :param security_methods: The security_methods of this AefProfile.  # noqa: E501
        :type security_methods: List[SecurityMethod]
        :param domain_name: The domain_name of this AefProfile.  # noqa: E501
        :type domain_name: str
        :param interface_descriptions: The interface_descriptions of this AefProfile.  # noqa: E501
        :type interface_descriptions: List[InterfaceDescription]
        """
        self.openapi_types = {
            'aef_id': str,
            'versions': List[Version],
            'protocol': Protocol,
            'data_format': DataFormat,
            'security_methods': List[SecurityMethod],
            'domain_name': str,
            'interface_descriptions': List[InterfaceDescription]
        }

        self.attribute_map = {
            'aef_id': 'aefId',
            'versions': 'versions',
            'protocol': 'protocol',
            'data_format': 'dataFormat',
            'security_methods': 'securityMethods',
            'domain_name': 'domainName',
            'interface_descriptions': 'interfaceDescriptions'
        }

        self._aef_id = aef_id
        self._versions = versions
        self._protocol = protocol
        self._data_format = data_format
        self._security_methods = security_methods
        self._domain_name = domain_name
        self._interface_descriptions = interface_descriptions

    @classmethod
    def from_dict(cls, dikt) -> 'AefProfile':
        """Returns the dict as a model

        :param dikt: A dict.
        :type: dict
        :return: The AefProfile of this AefProfile.  # noqa: E501
        :rtype: AefProfile
        """
        return util.deserialize_model(dikt, cls)

    @property
    def aef_id(self):
        """Gets the aef_id of this AefProfile.

        Identifier of the API exposing function  # noqa: E501

        :return: The aef_id of this AefProfile.
        :rtype: str
        """
        return self._aef_id

    @aef_id.setter
    def aef_id(self, aef_id):
        """Sets the aef_id of this AefProfile.

        Identifier of the API exposing function  # noqa: E501

        :param aef_id: The aef_id of this AefProfile.
        :type aef_id: str
        """
        if aef_id is None:
            raise ValueError("Invalid value for `aef_id`, must not be `None`")  # noqa: E501

        self._aef_id = aef_id

    @property
    def versions(self):
        """Gets the versions of this AefProfile.

        API version  # noqa: E501

        :return: The versions of this AefProfile.
        :rtype: List[Version]
        """
        return self._versions

    @versions.setter
    def versions(self, versions):
        """Sets the versions of this AefProfile.

        API version  # noqa: E501

        :param versions: The versions of this AefProfile.
        :type versions: List[Version]
        """
        if versions is None:
            raise ValueError("Invalid value for `versions`, must not be `None`")  # noqa: E501
        if versions is not None and len(versions) < 1:
            raise ValueError("Invalid value for `versions`, number of items must be greater than or equal to `1`")  # noqa: E501

        self._versions = versions

    @property
    def protocol(self):
        """Gets the protocol of this AefProfile.


        :return: The protocol of this AefProfile.
        :rtype: Protocol
        """
        return self._protocol

    @protocol.setter
    def protocol(self, protocol):
        """Sets the protocol of this AefProfile.


        :param protocol: The protocol of this AefProfile.
        :type protocol: Protocol
        """

        self._protocol = protocol

    @property
    def data_format(self):
        """Gets the data_format of this AefProfile.


        :return: The data_format of this AefProfile.
        :rtype: DataFormat
        """
        return self._data_format

    @data_format.setter
    def data_format(self, data_format):
        """Sets the data_format of this AefProfile.


        :param data_format: The data_format of this AefProfile.
        :type data_format: DataFormat
        """

        self._data_format = data_format

    @property
    def security_methods(self):
        """Gets the security_methods of this AefProfile.

        Security methods supported by the AEF  # noqa: E501

        :return: The security_methods of this AefProfile.
        :rtype: List[SecurityMethod]
        """
        return self._security_methods

    @security_methods.setter
    def security_methods(self, security_methods):
        """Sets the security_methods of this AefProfile.

        Security methods supported by the AEF  # noqa: E501

        :param security_methods: The security_methods of this AefProfile.
        :type security_methods: List[SecurityMethod]
        """
        if security_methods is not None and len(security_methods) < 1:
            raise ValueError("Invalid value for `security_methods`, number of items must be greater than or equal to `1`")  # noqa: E501

        self._security_methods = security_methods

    @property
    def domain_name(self):
        """Gets the domain_name of this AefProfile.

        Domain to which API belongs to  # noqa: E501

        :return: The domain_name of this AefProfile.
        :rtype: str
        """
        return self._domain_name

    @domain_name.setter
    def domain_name(self, domain_name):
        """Sets the domain_name of this AefProfile.

        Domain to which API belongs to  # noqa: E501

        :param domain_name: The domain_name of this AefProfile.
        :type domain_name: str
        """

        self._domain_name = domain_name

    @property
    def interface_descriptions(self):
        """Gets the interface_descriptions of this AefProfile.

        Interface details  # noqa: E501

        :return: The interface_descriptions of this AefProfile.
        :rtype: List[InterfaceDescription]
        """
        return self._interface_descriptions

    @interface_descriptions.setter
    def interface_descriptions(self, interface_descriptions):
        """Sets the interface_descriptions of this AefProfile.

        Interface details  # noqa: E501

        :param interface_descriptions: The interface_descriptions of this AefProfile.
        :type interface_descriptions: List[InterfaceDescription]
        """
        if interface_descriptions is not None and len(interface_descriptions) < 1:
            raise ValueError("Invalid value for `interface_descriptions`, number of items must be greater than or equal to `1`")  # noqa: E501

        self._interface_descriptions = interface_descriptions
