# 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 StoreBaseData(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 = {
        'name': 'str',
        'website': 'str',
        'default_currency': 'str',
        'invoice_expiration': 'AllOfStoreBaseDataInvoiceExpiration',
        'monitoring_expiration': 'AllOfStoreBaseDataMonitoringExpiration',
        'speed_policy': 'SpeedPolicy',
        'lightning_description_template': 'str',
        'payment_tolerance': 'float',
        'anyone_can_create_invoice': 'bool',
        'requires_refund_email': 'bool',
        'receipt': 'ReceiptOptions',
        'lightning_amount_in_satoshi': 'bool',
        'lightning_private_route_hints': 'bool',
        'on_chain_with_ln_invoice_fallback': 'bool',
        'redirect_automatically': 'bool',
        'show_recommended_fee': 'bool',
        'recommended_fee_block_target': 'int',
        'default_lang': 'str',
        'custom_logo': 'str',
        'custom_css': 'str',
        'html_title': 'str',
        'network_fee_mode': 'NetworkFeeMode',
        'pay_join_enabled': 'bool',
        'lazy_payment_methods': 'bool',
        'default_payment_method': 'str'
    }

    attribute_map = {
        'name': 'name',
        'website': 'website',
        'default_currency': 'defaultCurrency',
        'invoice_expiration': 'invoiceExpiration',
        'monitoring_expiration': 'monitoringExpiration',
        'speed_policy': 'speedPolicy',
        'lightning_description_template': 'lightningDescriptionTemplate',
        'payment_tolerance': 'paymentTolerance',
        'anyone_can_create_invoice': 'anyoneCanCreateInvoice',
        'requires_refund_email': 'requiresRefundEmail',
        'receipt': 'receipt',
        'lightning_amount_in_satoshi': 'lightningAmountInSatoshi',
        'lightning_private_route_hints': 'lightningPrivateRouteHints',
        'on_chain_with_ln_invoice_fallback': 'onChainWithLnInvoiceFallback',
        'redirect_automatically': 'redirectAutomatically',
        'show_recommended_fee': 'showRecommendedFee',
        'recommended_fee_block_target': 'recommendedFeeBlockTarget',
        'default_lang': 'defaultLang',
        'custom_logo': 'customLogo',
        'custom_css': 'customCSS',
        'html_title': 'htmlTitle',
        'network_fee_mode': 'networkFeeMode',
        'pay_join_enabled': 'payJoinEnabled',
        'lazy_payment_methods': 'lazyPaymentMethods',
        'default_payment_method': 'defaultPaymentMethod'
    }

    def __init__(self, name=None, website=None, default_currency='USD', invoice_expiration=None, monitoring_expiration=None, speed_policy=None, lightning_description_template=None, payment_tolerance=0, anyone_can_create_invoice=False, requires_refund_email=False, receipt=None, lightning_amount_in_satoshi=False, lightning_private_route_hints=False, on_chain_with_ln_invoice_fallback=False, redirect_automatically=False, show_recommended_fee=True, recommended_fee_block_target=1, default_lang='en', custom_logo=None, custom_css=None, html_title=None, network_fee_mode=None, pay_join_enabled=False, lazy_payment_methods=False, default_payment_method=None):  # noqa: E501
        """StoreBaseData - a model defined in Swagger"""  # noqa: E501
        self._name = None
        self._website = None
        self._default_currency = None
        self._invoice_expiration = None
        self._monitoring_expiration = None
        self._speed_policy = None
        self._lightning_description_template = None
        self._payment_tolerance = None
        self._anyone_can_create_invoice = None
        self._requires_refund_email = None
        self._receipt = None
        self._lightning_amount_in_satoshi = None
        self._lightning_private_route_hints = None
        self._on_chain_with_ln_invoice_fallback = None
        self._redirect_automatically = None
        self._show_recommended_fee = None
        self._recommended_fee_block_target = None
        self._default_lang = None
        self._custom_logo = None
        self._custom_css = None
        self._html_title = None
        self._network_fee_mode = None
        self._pay_join_enabled = None
        self._lazy_payment_methods = None
        self._default_payment_method = None
        self.discriminator = None
        if name is not None:
            self.name = name
        if website is not None:
            self.website = website
        if default_currency is not None:
            self.default_currency = default_currency
        if invoice_expiration is not None:
            self.invoice_expiration = invoice_expiration
        if monitoring_expiration is not None:
            self.monitoring_expiration = monitoring_expiration
        if speed_policy is not None:
            self.speed_policy = speed_policy
        if lightning_description_template is not None:
            self.lightning_description_template = lightning_description_template
        if payment_tolerance is not None:
            self.payment_tolerance = payment_tolerance
        if anyone_can_create_invoice is not None:
            self.anyone_can_create_invoice = anyone_can_create_invoice
        if requires_refund_email is not None:
            self.requires_refund_email = requires_refund_email
        if receipt is not None:
            self.receipt = receipt
        if lightning_amount_in_satoshi is not None:
            self.lightning_amount_in_satoshi = lightning_amount_in_satoshi
        if lightning_private_route_hints is not None:
            self.lightning_private_route_hints = lightning_private_route_hints
        if on_chain_with_ln_invoice_fallback is not None:
            self.on_chain_with_ln_invoice_fallback = on_chain_with_ln_invoice_fallback
        if redirect_automatically is not None:
            self.redirect_automatically = redirect_automatically
        if show_recommended_fee is not None:
            self.show_recommended_fee = show_recommended_fee
        if recommended_fee_block_target is not None:
            self.recommended_fee_block_target = recommended_fee_block_target
        if default_lang is not None:
            self.default_lang = default_lang
        if custom_logo is not None:
            self.custom_logo = custom_logo
        if custom_css is not None:
            self.custom_css = custom_css
        if html_title is not None:
            self.html_title = html_title
        if network_fee_mode is not None:
            self.network_fee_mode = network_fee_mode
        if pay_join_enabled is not None:
            self.pay_join_enabled = pay_join_enabled
        if lazy_payment_methods is not None:
            self.lazy_payment_methods = lazy_payment_methods
        if default_payment_method is not None:
            self.default_payment_method = default_payment_method

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

        The name of the store  # noqa: E501

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

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

        The name of the store  # noqa: E501

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

        self._name = name

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

        The absolute url of the store  # noqa: E501

        :return: The website of this StoreBaseData.  # noqa: E501
        :rtype: str
        """
        return self._website

    @website.setter
    def website(self, website):
        """Sets the website of this StoreBaseData.

        The absolute url of the store  # noqa: E501

        :param website: The website of this StoreBaseData.  # noqa: E501
        :type: str
        """

        self._website = website

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

        The default currency of the store  # noqa: E501

        :return: The default_currency of this StoreBaseData.  # noqa: E501
        :rtype: str
        """
        return self._default_currency

    @default_currency.setter
    def default_currency(self, default_currency):
        """Sets the default_currency of this StoreBaseData.

        The default currency of the store  # noqa: E501

        :param default_currency: The default_currency of this StoreBaseData.  # noqa: E501
        :type: str
        """

        self._default_currency = default_currency

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

        The time after which an invoice is considered expired if not paid. The value will be rounded down to a minute.  # noqa: E501

        :return: The invoice_expiration of this StoreBaseData.  # noqa: E501
        :rtype: AllOfStoreBaseDataInvoiceExpiration
        """
        return self._invoice_expiration

    @invoice_expiration.setter
    def invoice_expiration(self, invoice_expiration):
        """Sets the invoice_expiration of this StoreBaseData.

        The time after which an invoice is considered expired if not paid. The value will be rounded down to a minute.  # noqa: E501

        :param invoice_expiration: The invoice_expiration of this StoreBaseData.  # noqa: E501
        :type: AllOfStoreBaseDataInvoiceExpiration
        """

        self._invoice_expiration = invoice_expiration

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

        The time after which an invoice which has been paid but not confirmed will be considered invalid. The value will be rounded down to a minute.  # noqa: E501

        :return: The monitoring_expiration of this StoreBaseData.  # noqa: E501
        :rtype: AllOfStoreBaseDataMonitoringExpiration
        """
        return self._monitoring_expiration

    @monitoring_expiration.setter
    def monitoring_expiration(self, monitoring_expiration):
        """Sets the monitoring_expiration of this StoreBaseData.

        The time after which an invoice which has been paid but not confirmed will be considered invalid. The value will be rounded down to a minute.  # noqa: E501

        :param monitoring_expiration: The monitoring_expiration of this StoreBaseData.  # noqa: E501
        :type: AllOfStoreBaseDataMonitoringExpiration
        """

        self._monitoring_expiration = monitoring_expiration

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


        :return: The speed_policy of this StoreBaseData.  # noqa: E501
        :rtype: SpeedPolicy
        """
        return self._speed_policy

    @speed_policy.setter
    def speed_policy(self, speed_policy):
        """Sets the speed_policy of this StoreBaseData.


        :param speed_policy: The speed_policy of this StoreBaseData.  # noqa: E501
        :type: SpeedPolicy
        """

        self._speed_policy = speed_policy

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

        The BOLT11 description of the lightning invoice in the checkout. You can use placeholders '{StoreName}', '{ItemDescription}' and '{OrderId}'.  # noqa: E501

        :return: The lightning_description_template of this StoreBaseData.  # noqa: E501
        :rtype: str
        """
        return self._lightning_description_template

    @lightning_description_template.setter
    def lightning_description_template(self, lightning_description_template):
        """Sets the lightning_description_template of this StoreBaseData.

        The BOLT11 description of the lightning invoice in the checkout. You can use placeholders '{StoreName}', '{ItemDescription}' and '{OrderId}'.  # noqa: E501

        :param lightning_description_template: The lightning_description_template of this StoreBaseData.  # noqa: E501
        :type: str
        """

        self._lightning_description_template = lightning_description_template

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

        Consider an invoice fully paid, even if the payment is missing 'x' % of the full amount.  # noqa: E501

        :return: The payment_tolerance of this StoreBaseData.  # noqa: E501
        :rtype: float
        """
        return self._payment_tolerance

    @payment_tolerance.setter
    def payment_tolerance(self, payment_tolerance):
        """Sets the payment_tolerance of this StoreBaseData.

        Consider an invoice fully paid, even if the payment is missing 'x' % of the full amount.  # noqa: E501

        :param payment_tolerance: The payment_tolerance of this StoreBaseData.  # noqa: E501
        :type: float
        """

        self._payment_tolerance = payment_tolerance

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

        If true, then no authentication is needed to create invoices on this store.  # noqa: E501

        :return: The anyone_can_create_invoice of this StoreBaseData.  # noqa: E501
        :rtype: bool
        """
        return self._anyone_can_create_invoice

    @anyone_can_create_invoice.setter
    def anyone_can_create_invoice(self, anyone_can_create_invoice):
        """Sets the anyone_can_create_invoice of this StoreBaseData.

        If true, then no authentication is needed to create invoices on this store.  # noqa: E501

        :param anyone_can_create_invoice: The anyone_can_create_invoice of this StoreBaseData.  # noqa: E501
        :type: bool
        """

        self._anyone_can_create_invoice = anyone_can_create_invoice

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

        If true, the checkout page will ask to enter an email address before accessing payment information.  # noqa: E501

        :return: The requires_refund_email of this StoreBaseData.  # noqa: E501
        :rtype: bool
        """
        return self._requires_refund_email

    @requires_refund_email.setter
    def requires_refund_email(self, requires_refund_email):
        """Sets the requires_refund_email of this StoreBaseData.

        If true, the checkout page will ask to enter an email address before accessing payment information.  # noqa: E501

        :param requires_refund_email: The requires_refund_email of this StoreBaseData.  # noqa: E501
        :type: bool
        """

        self._requires_refund_email = requires_refund_email

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


        :return: The receipt of this StoreBaseData.  # noqa: E501
        :rtype: ReceiptOptions
        """
        return self._receipt

    @receipt.setter
    def receipt(self, receipt):
        """Sets the receipt of this StoreBaseData.


        :param receipt: The receipt of this StoreBaseData.  # noqa: E501
        :type: ReceiptOptions
        """

        self._receipt = receipt

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

        If true, lightning payment methods show amount in satoshi in the checkout page.  # noqa: E501

        :return: The lightning_amount_in_satoshi of this StoreBaseData.  # noqa: E501
        :rtype: bool
        """
        return self._lightning_amount_in_satoshi

    @lightning_amount_in_satoshi.setter
    def lightning_amount_in_satoshi(self, lightning_amount_in_satoshi):
        """Sets the lightning_amount_in_satoshi of this StoreBaseData.

        If true, lightning payment methods show amount in satoshi in the checkout page.  # noqa: E501

        :param lightning_amount_in_satoshi: The lightning_amount_in_satoshi of this StoreBaseData.  # noqa: E501
        :type: bool
        """

        self._lightning_amount_in_satoshi = lightning_amount_in_satoshi

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

        Should private route hints be included in the lightning payment of the checkout page.  # noqa: E501

        :return: The lightning_private_route_hints of this StoreBaseData.  # noqa: E501
        :rtype: bool
        """
        return self._lightning_private_route_hints

    @lightning_private_route_hints.setter
    def lightning_private_route_hints(self, lightning_private_route_hints):
        """Sets the lightning_private_route_hints of this StoreBaseData.

        Should private route hints be included in the lightning payment of the checkout page.  # noqa: E501

        :param lightning_private_route_hints: The lightning_private_route_hints of this StoreBaseData.  # noqa: E501
        :type: bool
        """

        self._lightning_private_route_hints = lightning_private_route_hints

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

        Include lightning invoice fallback to on-chain BIP21 payment url.  # noqa: E501

        :return: The on_chain_with_ln_invoice_fallback of this StoreBaseData.  # noqa: E501
        :rtype: bool
        """
        return self._on_chain_with_ln_invoice_fallback

    @on_chain_with_ln_invoice_fallback.setter
    def on_chain_with_ln_invoice_fallback(self, on_chain_with_ln_invoice_fallback):
        """Sets the on_chain_with_ln_invoice_fallback of this StoreBaseData.

        Include lightning invoice fallback to on-chain BIP21 payment url.  # noqa: E501

        :param on_chain_with_ln_invoice_fallback: The on_chain_with_ln_invoice_fallback of this StoreBaseData.  # noqa: E501
        :type: bool
        """

        self._on_chain_with_ln_invoice_fallback = on_chain_with_ln_invoice_fallback

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

        After successfull payment, should the checkout page redirect the user automatically to the redirect URL of the invoice?  # noqa: E501

        :return: The redirect_automatically of this StoreBaseData.  # noqa: E501
        :rtype: bool
        """
        return self._redirect_automatically

    @redirect_automatically.setter
    def redirect_automatically(self, redirect_automatically):
        """Sets the redirect_automatically of this StoreBaseData.

        After successfull payment, should the checkout page redirect the user automatically to the redirect URL of the invoice?  # noqa: E501

        :param redirect_automatically: The redirect_automatically of this StoreBaseData.  # noqa: E501
        :type: bool
        """

        self._redirect_automatically = redirect_automatically

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


        :return: The show_recommended_fee of this StoreBaseData.  # noqa: E501
        :rtype: bool
        """
        return self._show_recommended_fee

    @show_recommended_fee.setter
    def show_recommended_fee(self, show_recommended_fee):
        """Sets the show_recommended_fee of this StoreBaseData.


        :param show_recommended_fee: The show_recommended_fee of this StoreBaseData.  # noqa: E501
        :type: bool
        """

        self._show_recommended_fee = show_recommended_fee

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

        The fee rate recommendation in the checkout page for the on-chain payment to be confirmed after 'x' blocks.  # noqa: E501

        :return: The recommended_fee_block_target of this StoreBaseData.  # noqa: E501
        :rtype: int
        """
        return self._recommended_fee_block_target

    @recommended_fee_block_target.setter
    def recommended_fee_block_target(self, recommended_fee_block_target):
        """Sets the recommended_fee_block_target of this StoreBaseData.

        The fee rate recommendation in the checkout page for the on-chain payment to be confirmed after 'x' blocks.  # noqa: E501

        :param recommended_fee_block_target: The recommended_fee_block_target of this StoreBaseData.  # noqa: E501
        :type: int
        """

        self._recommended_fee_block_target = recommended_fee_block_target

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

        The default language to use in the checkout page. (The different translations available are listed [here](https://github.com/btcpayserver/btcpayserver/tree/master/BTCPayServer/wwwroot/locales)  # noqa: E501

        :return: The default_lang of this StoreBaseData.  # noqa: E501
        :rtype: str
        """
        return self._default_lang

    @default_lang.setter
    def default_lang(self, default_lang):
        """Sets the default_lang of this StoreBaseData.

        The default language to use in the checkout page. (The different translations available are listed [here](https://github.com/btcpayserver/btcpayserver/tree/master/BTCPayServer/wwwroot/locales)  # noqa: E501

        :param default_lang: The default_lang of this StoreBaseData.  # noqa: E501
        :type: str
        """

        self._default_lang = default_lang

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

        URL to a logo to include in the checkout page.  # noqa: E501

        :return: The custom_logo of this StoreBaseData.  # noqa: E501
        :rtype: str
        """
        return self._custom_logo

    @custom_logo.setter
    def custom_logo(self, custom_logo):
        """Sets the custom_logo of this StoreBaseData.

        URL to a logo to include in the checkout page.  # noqa: E501

        :param custom_logo: The custom_logo of this StoreBaseData.  # noqa: E501
        :type: str
        """

        self._custom_logo = custom_logo

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

        URL to a CSS stylesheet to include in the checkout page  # noqa: E501

        :return: The custom_css of this StoreBaseData.  # noqa: E501
        :rtype: str
        """
        return self._custom_css

    @custom_css.setter
    def custom_css(self, custom_css):
        """Sets the custom_css of this StoreBaseData.

        URL to a CSS stylesheet to include in the checkout page  # noqa: E501

        :param custom_css: The custom_css of this StoreBaseData.  # noqa: E501
        :type: str
        """

        self._custom_css = custom_css

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

        The HTML title of the checkout page (when you over the tab in your browser)  # noqa: E501

        :return: The html_title of this StoreBaseData.  # noqa: E501
        :rtype: str
        """
        return self._html_title

    @html_title.setter
    def html_title(self, html_title):
        """Sets the html_title of this StoreBaseData.

        The HTML title of the checkout page (when you over the tab in your browser)  # noqa: E501

        :param html_title: The html_title of this StoreBaseData.  # noqa: E501
        :type: str
        """

        self._html_title = html_title

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


        :return: The network_fee_mode of this StoreBaseData.  # noqa: E501
        :rtype: NetworkFeeMode
        """
        return self._network_fee_mode

    @network_fee_mode.setter
    def network_fee_mode(self, network_fee_mode):
        """Sets the network_fee_mode of this StoreBaseData.


        :param network_fee_mode: The network_fee_mode of this StoreBaseData.  # noqa: E501
        :type: NetworkFeeMode
        """

        self._network_fee_mode = network_fee_mode

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

        If true, payjoin will be proposed in the checkout page if possible. ([More information](https://docs.btcpayserver.org/Payjoin/))  # noqa: E501

        :return: The pay_join_enabled of this StoreBaseData.  # noqa: E501
        :rtype: bool
        """
        return self._pay_join_enabled

    @pay_join_enabled.setter
    def pay_join_enabled(self, pay_join_enabled):
        """Sets the pay_join_enabled of this StoreBaseData.

        If true, payjoin will be proposed in the checkout page if possible. ([More information](https://docs.btcpayserver.org/Payjoin/))  # noqa: E501

        :param pay_join_enabled: The pay_join_enabled of this StoreBaseData.  # noqa: E501
        :type: bool
        """

        self._pay_join_enabled = pay_join_enabled

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

        If true, payment methods are enabled individually upon user interaction in the invoice  # noqa: E501

        :return: The lazy_payment_methods of this StoreBaseData.  # noqa: E501
        :rtype: bool
        """
        return self._lazy_payment_methods

    @lazy_payment_methods.setter
    def lazy_payment_methods(self, lazy_payment_methods):
        """Sets the lazy_payment_methods of this StoreBaseData.

        If true, payment methods are enabled individually upon user interaction in the invoice  # noqa: E501

        :param lazy_payment_methods: The lazy_payment_methods of this StoreBaseData.  # noqa: E501
        :type: bool
        """

        self._lazy_payment_methods = lazy_payment_methods

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

        The default payment method to load when displaying an invoice. It can be in the format of `BTC_LightningNetwork` to specify Lightning to be the default or `BTC_OnChain`/ `BTC` for on-chain to be the default.   # noqa: E501

        :return: The default_payment_method of this StoreBaseData.  # noqa: E501
        :rtype: str
        """
        return self._default_payment_method

    @default_payment_method.setter
    def default_payment_method(self, default_payment_method):
        """Sets the default_payment_method of this StoreBaseData.

        The default payment method to load when displaying an invoice. It can be in the format of `BTC_LightningNetwork` to specify Lightning to be the default or `BTC_OnChain`/ `BTC` for on-chain to be the default.   # noqa: E501

        :param default_payment_method: The default_payment_method of this StoreBaseData.  # noqa: E501
        :type: str
        """

        self._default_payment_method = default_payment_method

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

        return self.__dict__ == other.__dict__

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