# coding: utf-8

"""
    ThingsBoard REST API

     ThingsBoard open-source IoT platform REST API documentation.  # noqa: E501

    OpenAPI spec version: 3.6.2
    Contact: info@thingsboard.io
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""

#  Copyright 2024. ThingsBoard
#
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.

import pprint
import re  # noqa: F401

import six

class DeviceProfile(object):
    """NOTE: This class is auto generated by the swagger code generator program.

    Do not edit the class manually.
    """
    """
    Attributes:
      swagger_types (dict): The key is attribute name
                            and the value is attribute type.
      attribute_map (dict): The key is attribute name
                            and the value is json key in definition.
    """
    swagger_types = {
        'id': 'DeviceProfileId',
        'created_time': 'int',
        'tenant_id': 'TenantId',
        'name': 'str',
        'default': 'bool',
        'default_dashboard_id': 'DashboardId',
        'default_rule_chain_id': 'RuleChainId',
        'default_queue_name': 'str',
        'firmware_id': 'OtaPackageId',
        'software_id': 'OtaPackageId',
        'description': 'str',
        'image': 'str',
        'provision_device_key': 'str',
        'transport_type': 'str',
        'provision_type': 'str',
        'profile_data': 'DeviceProfileData',
        'type': 'str',
        'default_edge_rule_chain_id': 'RuleChainId'
    }

    attribute_map = {
        'id': 'id',
        'created_time': 'createdTime',
        'tenant_id': 'tenantId',
        'name': 'name',
        'default': 'default',
        'default_dashboard_id': 'defaultDashboardId',
        'default_rule_chain_id': 'defaultRuleChainId',
        'default_queue_name': 'defaultQueueName',
        'firmware_id': 'firmwareId',
        'software_id': 'softwareId',
        'description': 'description',
        'image': 'image',
        'provision_device_key': 'provisionDeviceKey',
        'transport_type': 'transportType',
        'provision_type': 'provisionType',
        'profile_data': 'profileData',
        'type': 'type',
        'default_edge_rule_chain_id': 'defaultEdgeRuleChainId'
    }

    def __init__(self, id=None, created_time=None, tenant_id=None, name=None, default=None, default_dashboard_id=None, default_rule_chain_id=None, default_queue_name=None, firmware_id=None, software_id=None, description=None, image=None, provision_device_key=None, transport_type=None, provision_type=None, profile_data=None, type=None, default_edge_rule_chain_id=None):  # noqa: E501
        """DeviceProfile - a model defined in Swagger"""  # noqa: E501
        self._id = None
        self._created_time = None
        self._tenant_id = None
        self._name = None
        self._default = None
        self._default_dashboard_id = None
        self._default_rule_chain_id = None
        self._default_queue_name = None
        self._firmware_id = None
        self._software_id = None
        self._description = None
        self._image = None
        self._provision_device_key = None
        self._transport_type = None
        self._provision_type = None
        self._profile_data = None
        self._type = None
        self._default_edge_rule_chain_id = None
        self.discriminator = None
        if id is not None:
            self.id = id
        if created_time is not None:
            self.created_time = created_time
        if tenant_id is not None:
            self.tenant_id = tenant_id
        if name is not None:
            self.name = name
        if default is not None:
            self.default = default
        if default_dashboard_id is not None:
            self.default_dashboard_id = default_dashboard_id
        if default_rule_chain_id is not None:
            self.default_rule_chain_id = default_rule_chain_id
        if default_queue_name is not None:
            self.default_queue_name = default_queue_name
        if firmware_id is not None:
            self.firmware_id = firmware_id
        if software_id is not None:
            self.software_id = software_id
        if description is not None:
            self.description = description
        if image is not None:
            self.image = image
        if provision_device_key is not None:
            self.provision_device_key = provision_device_key
        if transport_type is not None:
            self.transport_type = transport_type
        if provision_type is not None:
            self.provision_type = provision_type
        if profile_data is not None:
            self.profile_data = profile_data
        if type is not None:
            self.type = type
        if default_edge_rule_chain_id is not None:
            self.default_edge_rule_chain_id = default_edge_rule_chain_id

    @property
    def id(self):
        """Gets the id of this DeviceProfile.  # noqa: E501


        :return: The id of this DeviceProfile.  # noqa: E501
        :rtype: DeviceProfileId
        """
        return self._id

    @id.setter
    def id(self, id):
        """Sets the id of this DeviceProfile.


        :param id: The id of this DeviceProfile.  # noqa: E501
        :type: DeviceProfileId
        """

        self._id = id

    @property
    def created_time(self):
        """Gets the created_time of this DeviceProfile.  # noqa: E501

        Timestamp of the profile creation, in milliseconds  # noqa: E501

        :return: The created_time of this DeviceProfile.  # noqa: E501
        :rtype: int
        """
        return self._created_time

    @created_time.setter
    def created_time(self, created_time):
        """Sets the created_time of this DeviceProfile.

        Timestamp of the profile creation, in milliseconds  # noqa: E501

        :param created_time: The created_time of this DeviceProfile.  # noqa: E501
        :type: int
        """

        self._created_time = created_time

    @property
    def tenant_id(self):
        """Gets the tenant_id of this DeviceProfile.  # noqa: E501


        :return: The tenant_id of this DeviceProfile.  # noqa: E501
        :rtype: TenantId
        """
        return self._tenant_id

    @tenant_id.setter
    def tenant_id(self, tenant_id):
        """Sets the tenant_id of this DeviceProfile.


        :param tenant_id: The tenant_id of this DeviceProfile.  # noqa: E501
        :type: TenantId
        """

        self._tenant_id = tenant_id

    @property
    def name(self):
        """Gets the name of this DeviceProfile.  # noqa: E501

        Unique Device Profile Name in scope of Tenant.  # noqa: E501

        :return: The name of this DeviceProfile.  # noqa: E501
        :rtype: str
        """
        return self._name

    @name.setter
    def name(self, name):
        """Sets the name of this DeviceProfile.

        Unique Device Profile Name in scope of Tenant.  # noqa: E501

        :param name: The name of this DeviceProfile.  # noqa: E501
        :type: str
        """

        self._name = name

    @property
    def default(self):
        """Gets the default of this DeviceProfile.  # noqa: E501

        Used to mark the default profile. Default profile is used when the device profile is not specified during device creation.  # noqa: E501

        :return: The default of this DeviceProfile.  # noqa: E501
        :rtype: bool
        """
        return self._default

    @default.setter
    def default(self, default):
        """Sets the default of this DeviceProfile.

        Used to mark the default profile. Default profile is used when the device profile is not specified during device creation.  # noqa: E501

        :param default: The default of this DeviceProfile.  # noqa: E501
        :type: bool
        """

        self._default = default

    @property
    def default_dashboard_id(self):
        """Gets the default_dashboard_id of this DeviceProfile.  # noqa: E501


        :return: The default_dashboard_id of this DeviceProfile.  # noqa: E501
        :rtype: DashboardId
        """
        return self._default_dashboard_id

    @default_dashboard_id.setter
    def default_dashboard_id(self, default_dashboard_id):
        """Sets the default_dashboard_id of this DeviceProfile.


        :param default_dashboard_id: The default_dashboard_id of this DeviceProfile.  # noqa: E501
        :type: DashboardId
        """

        self._default_dashboard_id = default_dashboard_id

    @property
    def default_rule_chain_id(self):
        """Gets the default_rule_chain_id of this DeviceProfile.  # noqa: E501


        :return: The default_rule_chain_id of this DeviceProfile.  # noqa: E501
        :rtype: RuleChainId
        """
        return self._default_rule_chain_id

    @default_rule_chain_id.setter
    def default_rule_chain_id(self, default_rule_chain_id):
        """Sets the default_rule_chain_id of this DeviceProfile.


        :param default_rule_chain_id: The default_rule_chain_id of this DeviceProfile.  # noqa: E501
        :type: RuleChainId
        """

        self._default_rule_chain_id = default_rule_chain_id

    @property
    def default_queue_name(self):
        """Gets the default_queue_name of this DeviceProfile.  # noqa: E501

        Rule engine queue name. If present, the specified queue will be used to store all unprocessed messages related to device, including telemetry, attribute updates, etc. Otherwise, the 'Main' queue will be used to store those messages.  # noqa: E501

        :return: The default_queue_name of this DeviceProfile.  # noqa: E501
        :rtype: str
        """
        return self._default_queue_name

    @default_queue_name.setter
    def default_queue_name(self, default_queue_name):
        """Sets the default_queue_name of this DeviceProfile.

        Rule engine queue name. If present, the specified queue will be used to store all unprocessed messages related to device, including telemetry, attribute updates, etc. Otherwise, the 'Main' queue will be used to store those messages.  # noqa: E501

        :param default_queue_name: The default_queue_name of this DeviceProfile.  # noqa: E501
        :type: str
        """

        self._default_queue_name = default_queue_name

    @property
    def firmware_id(self):
        """Gets the firmware_id of this DeviceProfile.  # noqa: E501


        :return: The firmware_id of this DeviceProfile.  # noqa: E501
        :rtype: OtaPackageId
        """
        return self._firmware_id

    @firmware_id.setter
    def firmware_id(self, firmware_id):
        """Sets the firmware_id of this DeviceProfile.


        :param firmware_id: The firmware_id of this DeviceProfile.  # noqa: E501
        :type: OtaPackageId
        """

        self._firmware_id = firmware_id

    @property
    def software_id(self):
        """Gets the software_id of this DeviceProfile.  # noqa: E501


        :return: The software_id of this DeviceProfile.  # noqa: E501
        :rtype: OtaPackageId
        """
        return self._software_id

    @software_id.setter
    def software_id(self, software_id):
        """Sets the software_id of this DeviceProfile.


        :param software_id: The software_id of this DeviceProfile.  # noqa: E501
        :type: OtaPackageId
        """

        self._software_id = software_id

    @property
    def description(self):
        """Gets the description of this DeviceProfile.  # noqa: E501

        Device Profile description.   # noqa: E501

        :return: The description of this DeviceProfile.  # noqa: E501
        :rtype: str
        """
        return self._description

    @description.setter
    def description(self, description):
        """Sets the description of this DeviceProfile.

        Device Profile description.   # noqa: E501

        :param description: The description of this DeviceProfile.  # noqa: E501
        :type: str
        """

        self._description = description

    @property
    def image(self):
        """Gets the image of this DeviceProfile.  # noqa: E501

        Either URL or Base64 data of the icon. Used in the mobile application to visualize set of device profiles in the grid view.   # noqa: E501

        :return: The image of this DeviceProfile.  # noqa: E501
        :rtype: str
        """
        return self._image

    @image.setter
    def image(self, image):
        """Sets the image of this DeviceProfile.

        Either URL or Base64 data of the icon. Used in the mobile application to visualize set of device profiles in the grid view.   # noqa: E501

        :param image: The image of this DeviceProfile.  # noqa: E501
        :type: str
        """

        self._image = image

    @property
    def provision_device_key(self):
        """Gets the provision_device_key of this DeviceProfile.  # noqa: E501

        Unique provisioning key used by 'Device Provisioning' feature.  # noqa: E501

        :return: The provision_device_key of this DeviceProfile.  # noqa: E501
        :rtype: str
        """
        return self._provision_device_key

    @provision_device_key.setter
    def provision_device_key(self, provision_device_key):
        """Sets the provision_device_key of this DeviceProfile.

        Unique provisioning key used by 'Device Provisioning' feature.  # noqa: E501

        :param provision_device_key: The provision_device_key of this DeviceProfile.  # noqa: E501
        :type: str
        """

        self._provision_device_key = provision_device_key

    @property
    def transport_type(self):
        """Gets the transport_type of this DeviceProfile.  # noqa: E501

        Type of the transport used to connect the device. Default transport supports HTTP, CoAP and MQTT.  # noqa: E501

        :return: The transport_type of this DeviceProfile.  # noqa: E501
        :rtype: str
        """
        return self._transport_type

    @transport_type.setter
    def transport_type(self, transport_type):
        """Sets the transport_type of this DeviceProfile.

        Type of the transport used to connect the device. Default transport supports HTTP, CoAP and MQTT.  # noqa: E501

        :param transport_type: The transport_type of this DeviceProfile.  # noqa: E501
        :type: str
        """
        allowed_values = ["COAP", "DEFAULT", "LWM2M", "MQTT", "SNMP"]  # noqa: E501
        if transport_type not in allowed_values:
            raise ValueError(
                "Invalid value for `transport_type` ({0}), must be one of {1}"  # noqa: E501
                .format(transport_type, allowed_values)
            )

        self._transport_type = transport_type

    @property
    def provision_type(self):
        """Gets the provision_type of this DeviceProfile.  # noqa: E501

        Provisioning strategy.  # noqa: E501

        :return: The provision_type of this DeviceProfile.  # noqa: E501
        :rtype: str
        """
        return self._provision_type

    @provision_type.setter
    def provision_type(self, provision_type):
        """Sets the provision_type of this DeviceProfile.

        Provisioning strategy.  # noqa: E501

        :param provision_type: The provision_type of this DeviceProfile.  # noqa: E501
        :type: str
        """
        allowed_values = ["ALLOW_CREATE_NEW_DEVICES", "CHECK_PRE_PROVISIONED_DEVICES", "DISABLED", "X509_CERTIFICATE_CHAIN"]  # noqa: E501
        if provision_type not in allowed_values:
            raise ValueError(
                "Invalid value for `provision_type` ({0}), must be one of {1}"  # noqa: E501
                .format(provision_type, allowed_values)
            )

        self._provision_type = provision_type

    @property
    def profile_data(self):
        """Gets the profile_data of this DeviceProfile.  # noqa: E501


        :return: The profile_data of this DeviceProfile.  # noqa: E501
        :rtype: DeviceProfileData
        """
        return self._profile_data

    @profile_data.setter
    def profile_data(self, profile_data):
        """Sets the profile_data of this DeviceProfile.


        :param profile_data: The profile_data of this DeviceProfile.  # noqa: E501
        :type: DeviceProfileData
        """

        self._profile_data = profile_data

    @property
    def type(self):
        """Gets the type of this DeviceProfile.  # noqa: E501

        Type of the profile. Always 'DEFAULT' for now. Reserved for future use.  # noqa: E501

        :return: The type of this DeviceProfile.  # noqa: E501
        :rtype: str
        """
        return self._type

    @type.setter
    def type(self, type):
        """Sets the type of this DeviceProfile.

        Type of the profile. Always 'DEFAULT' for now. Reserved for future use.  # noqa: E501

        :param type: The type of this DeviceProfile.  # noqa: E501
        :type: str
        """
        allowed_values = ["DEFAULT"]  # noqa: E501
        if type not in allowed_values:
            raise ValueError(
                "Invalid value for `type` ({0}), must be one of {1}"  # noqa: E501
                .format(type, allowed_values)
            )

        self._type = type

    @property
    def default_edge_rule_chain_id(self):
        """Gets the default_edge_rule_chain_id of this DeviceProfile.  # noqa: E501


        :return: The default_edge_rule_chain_id of this DeviceProfile.  # noqa: E501
        :rtype: RuleChainId
        """
        return self._default_edge_rule_chain_id

    @default_edge_rule_chain_id.setter
    def default_edge_rule_chain_id(self, default_edge_rule_chain_id):
        """Sets the default_edge_rule_chain_id of this DeviceProfile.


        :param default_edge_rule_chain_id: The default_edge_rule_chain_id of this DeviceProfile.  # noqa: E501
        :type: RuleChainId
        """

        self._default_edge_rule_chain_id = default_edge_rule_chain_id

    def to_dict(self):
        """Returns the model properties as a dict"""
        result = {}

        for attr, _ in six.iteritems(self.swagger_types):
            value = getattr(self, attr)
            if isinstance(value, list):
                result[attr] = list(map(
                    lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
                    value
                ))
            elif hasattr(value, "to_dict"):
                result[attr] = value.to_dict()
            elif isinstance(value, dict):
                result[attr] = dict(map(
                    lambda item: (item[0], item[1].to_dict())
                    if hasattr(item[1], "to_dict") else item,
                    value.items()
                ))
            else:
                result[attr] = value
        if issubclass(DeviceProfile, dict):
            for key, value in self.items():
                result[key] = value

        return result

    def to_str(self):
        """Returns the string representation of the model"""
        return pprint.pformat(self.to_dict())

    def __repr__(self):
        """For `print` and `pprint`"""
        return self.to_str()

    def __eq__(self, other):
        """Returns true if both objects are equal"""
        if not isinstance(other, DeviceProfile):
            return False

        return self.__dict__ == other.__dict__

    def __ne__(self, other):
        """Returns true if both objects are not equal"""
        return not self == other
