# coding: utf-8

"""
    ****************************************************************************
    Copyright (c) 2016-present,
    Jaguar0625, gimre, BloodyRookie, Tech Bureau, Corp. All rights reserved.

    This file is part of Catapult.

    Catapult is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    Catapult is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with Catapult. If not, see <http://www.gnu.org/licenses/>.
    ****************************************************************************
    
    Catapult REST Endpoints
    OpenAPI Specification of catapult-rest 2.2.0  # noqa: E501
    The version of the OpenAPI document: 0.10.4
    Contact: contact@nem.foundation

    NOTE: This file is auto generated by Symbol OpenAPI Generator:
    https://github.com/nemtech/symbol-openapi-generator
    Do not edit this file manually.
"""


import pprint
import re  # noqa: F401

import six

from symbol_openapi_client.configuration import Configuration


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

    Do not edit the class manually.
    """

    """
    Attributes:
      openapi_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.
    """
    openapi_types = {
        'accountlink': 'AccountKeyLinkNetworkPropertiesDTO',
        'aggregate': 'AggregateNetworkPropertiesDTO',
        'lockhash': 'HashLockNetworkPropertiesDTO',
        'locksecret': 'SecretLockNetworkPropertiesDTO',
        'metadata': 'MetadataNetworkPropertiesDTO',
        'mosaic': 'MosaicNetworkPropertiesDTO',
        'multisig': 'MultisigNetworkPropertiesDTO',
        'namespace': 'NamespaceNetworkPropertiesDTO',
        'restrictionaccount': 'AccountRestrictionNetworkPropertiesDTO',
        'restrictionmosaic': 'MosaicRestrictionNetworkPropertiesDTO',
        'transfer': 'TransferNetworkPropertiesDTO'
    }

    attribute_map = {
        'accountlink': 'accountlink',
        'aggregate': 'aggregate',
        'lockhash': 'lockhash',
        'locksecret': 'locksecret',
        'metadata': 'metadata',
        'mosaic': 'mosaic',
        'multisig': 'multisig',
        'namespace': 'namespace',
        'restrictionaccount': 'restrictionaccount',
        'restrictionmosaic': 'restrictionmosaic',
        'transfer': 'transfer'
    }

    def __init__(self, accountlink=None, aggregate=None, lockhash=None, locksecret=None, metadata=None, mosaic=None, multisig=None, namespace=None, restrictionaccount=None, restrictionmosaic=None, transfer=None, local_vars_configuration=None):  # noqa: E501
        """PluginsPropertiesDTO - a model defined in OpenAPI"""  # noqa: E501
        if local_vars_configuration is None:
            local_vars_configuration = Configuration()
        self.local_vars_configuration = local_vars_configuration

        self._accountlink = None
        self._aggregate = None
        self._lockhash = None
        self._locksecret = None
        self._metadata = None
        self._mosaic = None
        self._multisig = None
        self._namespace = None
        self._restrictionaccount = None
        self._restrictionmosaic = None
        self._transfer = None
        self.discriminator = None

        if accountlink is not None:
            self.accountlink = accountlink
        if aggregate is not None:
            self.aggregate = aggregate
        if lockhash is not None:
            self.lockhash = lockhash
        if locksecret is not None:
            self.locksecret = locksecret
        if metadata is not None:
            self.metadata = metadata
        if mosaic is not None:
            self.mosaic = mosaic
        if multisig is not None:
            self.multisig = multisig
        if namespace is not None:
            self.namespace = namespace
        if restrictionaccount is not None:
            self.restrictionaccount = restrictionaccount
        if restrictionmosaic is not None:
            self.restrictionmosaic = restrictionmosaic
        if transfer is not None:
            self.transfer = transfer

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


        :return: The accountlink of this PluginsPropertiesDTO.  # noqa: E501
        :rtype: AccountKeyLinkNetworkPropertiesDTO
        """
        return self._accountlink

    @accountlink.setter
    def accountlink(self, accountlink):
        """Sets the accountlink of this PluginsPropertiesDTO.


        :param accountlink: The accountlink of this PluginsPropertiesDTO.  # noqa: E501
        :type: AccountKeyLinkNetworkPropertiesDTO
        """

        self._accountlink = accountlink

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


        :return: The aggregate of this PluginsPropertiesDTO.  # noqa: E501
        :rtype: AggregateNetworkPropertiesDTO
        """
        return self._aggregate

    @aggregate.setter
    def aggregate(self, aggregate):
        """Sets the aggregate of this PluginsPropertiesDTO.


        :param aggregate: The aggregate of this PluginsPropertiesDTO.  # noqa: E501
        :type: AggregateNetworkPropertiesDTO
        """

        self._aggregate = aggregate

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


        :return: The lockhash of this PluginsPropertiesDTO.  # noqa: E501
        :rtype: HashLockNetworkPropertiesDTO
        """
        return self._lockhash

    @lockhash.setter
    def lockhash(self, lockhash):
        """Sets the lockhash of this PluginsPropertiesDTO.


        :param lockhash: The lockhash of this PluginsPropertiesDTO.  # noqa: E501
        :type: HashLockNetworkPropertiesDTO
        """

        self._lockhash = lockhash

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


        :return: The locksecret of this PluginsPropertiesDTO.  # noqa: E501
        :rtype: SecretLockNetworkPropertiesDTO
        """
        return self._locksecret

    @locksecret.setter
    def locksecret(self, locksecret):
        """Sets the locksecret of this PluginsPropertiesDTO.


        :param locksecret: The locksecret of this PluginsPropertiesDTO.  # noqa: E501
        :type: SecretLockNetworkPropertiesDTO
        """

        self._locksecret = locksecret

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


        :return: The metadata of this PluginsPropertiesDTO.  # noqa: E501
        :rtype: MetadataNetworkPropertiesDTO
        """
        return self._metadata

    @metadata.setter
    def metadata(self, metadata):
        """Sets the metadata of this PluginsPropertiesDTO.


        :param metadata: The metadata of this PluginsPropertiesDTO.  # noqa: E501
        :type: MetadataNetworkPropertiesDTO
        """

        self._metadata = metadata

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


        :return: The mosaic of this PluginsPropertiesDTO.  # noqa: E501
        :rtype: MosaicNetworkPropertiesDTO
        """
        return self._mosaic

    @mosaic.setter
    def mosaic(self, mosaic):
        """Sets the mosaic of this PluginsPropertiesDTO.


        :param mosaic: The mosaic of this PluginsPropertiesDTO.  # noqa: E501
        :type: MosaicNetworkPropertiesDTO
        """

        self._mosaic = mosaic

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


        :return: The multisig of this PluginsPropertiesDTO.  # noqa: E501
        :rtype: MultisigNetworkPropertiesDTO
        """
        return self._multisig

    @multisig.setter
    def multisig(self, multisig):
        """Sets the multisig of this PluginsPropertiesDTO.


        :param multisig: The multisig of this PluginsPropertiesDTO.  # noqa: E501
        :type: MultisigNetworkPropertiesDTO
        """

        self._multisig = multisig

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


        :return: The namespace of this PluginsPropertiesDTO.  # noqa: E501
        :rtype: NamespaceNetworkPropertiesDTO
        """
        return self._namespace

    @namespace.setter
    def namespace(self, namespace):
        """Sets the namespace of this PluginsPropertiesDTO.


        :param namespace: The namespace of this PluginsPropertiesDTO.  # noqa: E501
        :type: NamespaceNetworkPropertiesDTO
        """

        self._namespace = namespace

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


        :return: The restrictionaccount of this PluginsPropertiesDTO.  # noqa: E501
        :rtype: AccountRestrictionNetworkPropertiesDTO
        """
        return self._restrictionaccount

    @restrictionaccount.setter
    def restrictionaccount(self, restrictionaccount):
        """Sets the restrictionaccount of this PluginsPropertiesDTO.


        :param restrictionaccount: The restrictionaccount of this PluginsPropertiesDTO.  # noqa: E501
        :type: AccountRestrictionNetworkPropertiesDTO
        """

        self._restrictionaccount = restrictionaccount

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


        :return: The restrictionmosaic of this PluginsPropertiesDTO.  # noqa: E501
        :rtype: MosaicRestrictionNetworkPropertiesDTO
        """
        return self._restrictionmosaic

    @restrictionmosaic.setter
    def restrictionmosaic(self, restrictionmosaic):
        """Sets the restrictionmosaic of this PluginsPropertiesDTO.


        :param restrictionmosaic: The restrictionmosaic of this PluginsPropertiesDTO.  # noqa: E501
        :type: MosaicRestrictionNetworkPropertiesDTO
        """

        self._restrictionmosaic = restrictionmosaic

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


        :return: The transfer of this PluginsPropertiesDTO.  # noqa: E501
        :rtype: TransferNetworkPropertiesDTO
        """
        return self._transfer

    @transfer.setter
    def transfer(self, transfer):
        """Sets the transfer of this PluginsPropertiesDTO.


        :param transfer: The transfer of this PluginsPropertiesDTO.  # noqa: E501
        :type: TransferNetworkPropertiesDTO
        """

        self._transfer = transfer

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

        for attr, _ in six.iteritems(self.openapi_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

        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, PluginsPropertiesDTO):
            return False

        return self.to_dict() == other.to_dict()

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

        return self.to_dict() != other.to_dict()
