# coding: utf-8

"""
    BTCPay Greenfield API

    A full API to use your BTCPay Server  # noqa: E501

    OpenAPI spec version: v1
    
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""

import pprint
import re  # noqa: F401

import six

class WithdrawalResultData(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 = {
        'asset': 'str',
        'payment_method': 'str',
        'ledger_entries': 'list[LedgerEntryData]',
        'withdrawal_id': 'str',
        'account_id': 'str',
        'custodian_code': 'str',
        'status': 'str',
        'transaction_id': 'str',
        'target_address': 'str'
    }

    attribute_map = {
        'asset': 'asset',
        'payment_method': 'paymentMethod',
        'ledger_entries': 'ledgerEntries',
        'withdrawal_id': 'withdrawalId',
        'account_id': 'accountId',
        'custodian_code': 'custodianCode',
        'status': 'status',
        'transaction_id': 'transactionId',
        'target_address': 'targetAddress'
    }

    def __init__(self, asset=None, payment_method=None, ledger_entries=None, withdrawal_id=None, account_id=None, custodian_code=None, status=None, transaction_id=None, target_address=None):  # noqa: E501
        """WithdrawalResultData - a model defined in Swagger"""  # noqa: E501
        self._asset = None
        self._payment_method = None
        self._ledger_entries = None
        self._withdrawal_id = None
        self._account_id = None
        self._custodian_code = None
        self._status = None
        self._transaction_id = None
        self._target_address = None
        self.discriminator = None
        if asset is not None:
            self.asset = asset
        if payment_method is not None:
            self.payment_method = payment_method
        if ledger_entries is not None:
            self.ledger_entries = ledger_entries
        if withdrawal_id is not None:
            self.withdrawal_id = withdrawal_id
        if account_id is not None:
            self.account_id = account_id
        if custodian_code is not None:
            self.custodian_code = custodian_code
        if status is not None:
            self.status = status
        if transaction_id is not None:
            self.transaction_id = transaction_id
        if target_address is not None:
            self.target_address = target_address

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

        The asset that is being withdrawn.  # noqa: E501

        :return: The asset of this WithdrawalResultData.  # noqa: E501
        :rtype: str
        """
        return self._asset

    @asset.setter
    def asset(self, asset):
        """Sets the asset of this WithdrawalResultData.

        The asset that is being withdrawn.  # noqa: E501

        :param asset: The asset of this WithdrawalResultData.  # noqa: E501
        :type: str
        """

        self._asset = asset

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

        The payment method that is used (crypto code + network).  # noqa: E501

        :return: The payment_method of this WithdrawalResultData.  # noqa: E501
        :rtype: str
        """
        return self._payment_method

    @payment_method.setter
    def payment_method(self, payment_method):
        """Sets the payment_method of this WithdrawalResultData.

        The payment method that is used (crypto code + network).  # noqa: E501

        :param payment_method: The payment_method of this WithdrawalResultData.  # noqa: E501
        :type: str
        """

        self._payment_method = payment_method

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

        The asset entries that were changed during the withdrawal. The first item is always the withdrawal itself. It could also includes ledger entries for the costs and may include credits or exchange tokens to give a discount.  # noqa: E501

        :return: The ledger_entries of this WithdrawalResultData.  # noqa: E501
        :rtype: list[LedgerEntryData]
        """
        return self._ledger_entries

    @ledger_entries.setter
    def ledger_entries(self, ledger_entries):
        """Sets the ledger_entries of this WithdrawalResultData.

        The asset entries that were changed during the withdrawal. The first item is always the withdrawal itself. It could also includes ledger entries for the costs and may include credits or exchange tokens to give a discount.  # noqa: E501

        :param ledger_entries: The ledger_entries of this WithdrawalResultData.  # noqa: E501
        :type: list[LedgerEntryData]
        """

        self._ledger_entries = ledger_entries

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

        The unique ID of the withdrawal used by the exchange.  # noqa: E501

        :return: The withdrawal_id of this WithdrawalResultData.  # noqa: E501
        :rtype: str
        """
        return self._withdrawal_id

    @withdrawal_id.setter
    def withdrawal_id(self, withdrawal_id):
        """Sets the withdrawal_id of this WithdrawalResultData.

        The unique ID of the withdrawal used by the exchange.  # noqa: E501

        :param withdrawal_id: The withdrawal_id of this WithdrawalResultData.  # noqa: E501
        :type: str
        """

        self._withdrawal_id = withdrawal_id

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

        The unique ID of the custodian account used.  # noqa: E501

        :return: The account_id of this WithdrawalResultData.  # noqa: E501
        :rtype: str
        """
        return self._account_id

    @account_id.setter
    def account_id(self, account_id):
        """Sets the account_id of this WithdrawalResultData.

        The unique ID of the custodian account used.  # noqa: E501

        :param account_id: The account_id of this WithdrawalResultData.  # noqa: E501
        :type: str
        """

        self._account_id = account_id

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

        The code of the custodian used.  # noqa: E501

        :return: The custodian_code of this WithdrawalResultData.  # noqa: E501
        :rtype: str
        """
        return self._custodian_code

    @custodian_code.setter
    def custodian_code(self, custodian_code):
        """Sets the custodian_code of this WithdrawalResultData.

        The code of the custodian used.  # noqa: E501

        :param custodian_code: The custodian_code of this WithdrawalResultData.  # noqa: E501
        :type: str
        """

        self._custodian_code = custodian_code

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

        The status of the withdrawal: 'Queued', 'Complete', 'Failed' or 'Unknown'.  # noqa: E501

        :return: The status of this WithdrawalResultData.  # noqa: E501
        :rtype: str
        """
        return self._status

    @status.setter
    def status(self, status):
        """Sets the status of this WithdrawalResultData.

        The status of the withdrawal: 'Queued', 'Complete', 'Failed' or 'Unknown'.  # noqa: E501

        :param status: The status of this WithdrawalResultData.  # noqa: E501
        :type: str
        """

        self._status = status

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

        The transaction ID on the blockchain once the withdrawal has been executed.  # noqa: E501

        :return: The transaction_id of this WithdrawalResultData.  # noqa: E501
        :rtype: str
        """
        return self._transaction_id

    @transaction_id.setter
    def transaction_id(self, transaction_id):
        """Sets the transaction_id of this WithdrawalResultData.

        The transaction ID on the blockchain once the withdrawal has been executed.  # noqa: E501

        :param transaction_id: The transaction_id of this WithdrawalResultData.  # noqa: E501
        :type: str
        """

        self._transaction_id = transaction_id

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

        The address where the funds were sent to once the withdrawal has been executed.  # noqa: E501

        :return: The target_address of this WithdrawalResultData.  # noqa: E501
        :rtype: str
        """
        return self._target_address

    @target_address.setter
    def target_address(self, target_address):
        """Sets the target_address of this WithdrawalResultData.

        The address where the funds were sent to once the withdrawal has been executed.  # noqa: E501

        :param target_address: The target_address of this WithdrawalResultData.  # noqa: E501
        :type: str
        """

        self._target_address = target_address

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

        return self.__dict__ == other.__dict__

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