# coding: utf-8

"""
    Developer Registration API

    <span class=\"tablenote\"><b>Note:</b> The Client Registration API is not intended for use by developers who have previously registered for a Developer Account on the eBay platform.</span><br/>The Client Registration API provides Dynamic Client Registration for regulated Third Party Providers (TPPs) who are, or will be, engaged in financial transactions on behalf of individuals domiciled in the EU/UK. This is required by the EU's Second Payment Services Directive (PSD2) which requires all regulated Account Servicing Payment Service Providers (ASPSPs) to provide secure APIs to access account and payment services on behalf of account holders.<br/><br/>A successful registration response returns a <b>HTTP 201 Created</b> status code with a JSON payload [RFC7519] that includes registration information.  # noqa: E501

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

import pprint
import re  # noqa: F401

import six

class ClientDetails(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 = {
        'client_id': 'str',
        'client_id_issued_at': 'int',
        'client_name': 'str',
        'client_secret': 'str',
        'client_secret_expires_at': 'int',
        'contacts': 'list[str]',
        'grant_types': 'list[str]',
        'policy_uri': 'str',
        'redirect_uris': 'list[str]',
        'scope': 'str',
        'software_id': 'str',
        'software_statement': 'str'
    }

    attribute_map = {
        'client_id': 'client_id',
        'client_id_issued_at': 'client_id_issued_at',
        'client_name': 'client_name',
        'client_secret': 'client_secret',
        'client_secret_expires_at': 'client_secret_expires_at',
        'contacts': 'contacts',
        'grant_types': 'grant_types',
        'policy_uri': 'policy_uri',
        'redirect_uris': 'redirect_uris',
        'scope': 'scope',
        'software_id': 'software_id',
        'software_statement': 'software_statement'
    }

    def __init__(self, client_id=None, client_id_issued_at=None, client_name=None, client_secret=None, client_secret_expires_at=None, contacts=None, grant_types=None, policy_uri=None, redirect_uris=None, scope=None, software_id=None, software_statement=None):  # noqa: E501
        """ClientDetails - a model defined in Swagger"""  # noqa: E501
        self._client_id = None
        self._client_id_issued_at = None
        self._client_name = None
        self._client_secret = None
        self._client_secret_expires_at = None
        self._contacts = None
        self._grant_types = None
        self._policy_uri = None
        self._redirect_uris = None
        self._scope = None
        self._software_id = None
        self._software_statement = None
        self.discriminator = None
        if client_id is not None:
            self.client_id = client_id
        if client_id_issued_at is not None:
            self.client_id_issued_at = client_id_issued_at
        if client_name is not None:
            self.client_name = client_name
        if client_secret is not None:
            self.client_secret = client_secret
        if client_secret_expires_at is not None:
            self.client_secret_expires_at = client_secret_expires_at
        if contacts is not None:
            self.contacts = contacts
        if grant_types is not None:
            self.grant_types = grant_types
        if policy_uri is not None:
            self.policy_uri = policy_uri
        if redirect_uris is not None:
            self.redirect_uris = redirect_uris
        if scope is not None:
            self.scope = scope
        if software_id is not None:
            self.software_id = software_id
        if software_statement is not None:
            self.software_statement = software_statement

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

        A unique, eBay-generated id assigned to the third party application at the time it was registered.  # noqa: E501

        :return: The client_id of this ClientDetails.  # noqa: E501
        :rtype: str
        """
        return self._client_id

    @client_id.setter
    def client_id(self, client_id):
        """Sets the client_id of this ClientDetails.

        A unique, eBay-generated id assigned to the third party application at the time it was registered.  # noqa: E501

        :param client_id: The client_id of this ClientDetails.  # noqa: E501
        :type: str
        """

        self._client_id = client_id

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

        The UNIX timestamp when the <code>client_id</code> was issued. This time is represented as the number of seconds from \"1970-01-01T00:00:00Z\", as measured in UTC, until the date/time of issuance. Refer to <a href=\"https://datatracker.ietf.org/doc/html/rfc7591#section-2.3 \" target= \"_blank \">RFC 7591 - OAuth 2.0 Dynamic Client Registration Protocol</a> for complete information.  # noqa: E501

        :return: The client_id_issued_at of this ClientDetails.  # noqa: E501
        :rtype: int
        """
        return self._client_id_issued_at

    @client_id_issued_at.setter
    def client_id_issued_at(self, client_id_issued_at):
        """Sets the client_id_issued_at of this ClientDetails.

        The UNIX timestamp when the <code>client_id</code> was issued. This time is represented as the number of seconds from \"1970-01-01T00:00:00Z\", as measured in UTC, until the date/time of issuance. Refer to <a href=\"https://datatracker.ietf.org/doc/html/rfc7591#section-2.3 \" target= \"_blank \">RFC 7591 - OAuth 2.0 Dynamic Client Registration Protocol</a> for complete information.  # noqa: E501

        :param client_id_issued_at: The client_id_issued_at of this ClientDetails.  # noqa: E501
        :type: int
        """

        self._client_id_issued_at = client_id_issued_at

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

        User-friendly name for the third party financial application.<br/><br/><span class=\"tablenote\"><b>Note:</b> Language tags are not supported. Therefore, <code>client_name</code> will be specified in English.</span>  # noqa: E501

        :return: The client_name of this ClientDetails.  # noqa: E501
        :rtype: str
        """
        return self._client_name

    @client_name.setter
    def client_name(self, client_name):
        """Sets the client_name of this ClientDetails.

        User-friendly name for the third party financial application.<br/><br/><span class=\"tablenote\"><b>Note:</b> Language tags are not supported. Therefore, <code>client_name</code> will be specified in English.</span>  # noqa: E501

        :param client_name: The client_name of this ClientDetails.  # noqa: E501
        :type: str
        """

        self._client_name = client_name

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

        A unique OAuth 2.0 secret string assigned by eBay to the third party application at the time it is registered. This value should be unique for multiple instances of a client using the same <code>client_id</code>. This value is used by confidential clients to authenticate to the token endpoint, as described in OAuth 2.0 [RFC6749], Section 2.3.1.<br/><br/><span class=\"tablenote\"><b>Note:</b> <code>client_secret</code> is unique to the organization identifier of subject name which contains jurisdiction, NCA Id, and Authorization Number.</span>  # noqa: E501

        :return: The client_secret of this ClientDetails.  # noqa: E501
        :rtype: str
        """
        return self._client_secret

    @client_secret.setter
    def client_secret(self, client_secret):
        """Sets the client_secret of this ClientDetails.

        A unique OAuth 2.0 secret string assigned by eBay to the third party application at the time it is registered. This value should be unique for multiple instances of a client using the same <code>client_id</code>. This value is used by confidential clients to authenticate to the token endpoint, as described in OAuth 2.0 [RFC6749], Section 2.3.1.<br/><br/><span class=\"tablenote\"><b>Note:</b> <code>client_secret</code> is unique to the organization identifier of subject name which contains jurisdiction, NCA Id, and Authorization Number.</span>  # noqa: E501

        :param client_secret: The client_secret of this ClientDetails.  # noqa: E501
        :type: str
        """

        self._client_secret = client_secret

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

        The UNIX timestamp when the <code>client_secret</code> expires.<br/><br/><span class=\"tablenote\"><b>Note:</b> When a <code>client_secret</code> has been provided, this field is <b>REQUIRED</b>.</span><br/>A returned value of <b>0</b> indicates that the <code>client_secret</code> never expires.<br/><br/>This time is represented as the number of seconds from \"1970-01-01T00:00:00Z\", as measured in UTC, until the expiration date and time. Refer to <a href=\"https://datatracker.ietf.org/doc/html/rfc7591#section-3.2.1 \" target= \"_blank \">RFC 7591 - OAuth 2.0 Dynamic Client Registration Protocol section 3.2.1</a> for complete information.  # noqa: E501

        :return: The client_secret_expires_at of this ClientDetails.  # noqa: E501
        :rtype: int
        """
        return self._client_secret_expires_at

    @client_secret_expires_at.setter
    def client_secret_expires_at(self, client_secret_expires_at):
        """Sets the client_secret_expires_at of this ClientDetails.

        The UNIX timestamp when the <code>client_secret</code> expires.<br/><br/><span class=\"tablenote\"><b>Note:</b> When a <code>client_secret</code> has been provided, this field is <b>REQUIRED</b>.</span><br/>A returned value of <b>0</b> indicates that the <code>client_secret</code> never expires.<br/><br/>This time is represented as the number of seconds from \"1970-01-01T00:00:00Z\", as measured in UTC, until the expiration date and time. Refer to <a href=\"https://datatracker.ietf.org/doc/html/rfc7591#section-3.2.1 \" target= \"_blank \">RFC 7591 - OAuth 2.0 Dynamic Client Registration Protocol section 3.2.1</a> for complete information.  # noqa: E501

        :param client_secret_expires_at: The client_secret_expires_at of this ClientDetails.  # noqa: E501
        :type: int
        """

        self._client_secret_expires_at = client_secret_expires_at

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

        This container stores an array of email addresses for representatives at the third party provider responsible for the application being registered.  # noqa: E501

        :return: The contacts of this ClientDetails.  # noqa: E501
        :rtype: list[str]
        """
        return self._contacts

    @contacts.setter
    def contacts(self, contacts):
        """Sets the contacts of this ClientDetails.

        This container stores an array of email addresses for representatives at the third party provider responsible for the application being registered.  # noqa: E501

        :param contacts: The contacts of this ClientDetails.  # noqa: E501
        :type: list[str]
        """

        self._contacts = contacts

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

        An array of OAuth 2.0 grant type strings that the client software can use at the token endpoint. Supported grant type values are:<br/><ul><li><code>authorization_code</code>: The authorization code grant type defined in OAuth 2.0, Section 4.1.</li><li><code>client_credentials</code>: The client credentials grant type defined in OAuth 2.0, Section 4.4.</li></ul>If the token endpoint is used in the grant type, the value of this parameter <b>MUST</b> be the same as the value of the <code>grant_type</code> parameter passed to the token endpoint defined in the grant type definition. Authorization servers <b>may</b> allow for other values as defined in the grant type extension process described in OAuth 2.0, Section 4.5. If omitted, the default behavior is that the client will use only the <code>authorization_code</code> Grant Type.  # noqa: E501

        :return: The grant_types of this ClientDetails.  # noqa: E501
        :rtype: list[str]
        """
        return self._grant_types

    @grant_types.setter
    def grant_types(self, grant_types):
        """Sets the grant_types of this ClientDetails.

        An array of OAuth 2.0 grant type strings that the client software can use at the token endpoint. Supported grant type values are:<br/><ul><li><code>authorization_code</code>: The authorization code grant type defined in OAuth 2.0, Section 4.1.</li><li><code>client_credentials</code>: The client credentials grant type defined in OAuth 2.0, Section 4.4.</li></ul>If the token endpoint is used in the grant type, the value of this parameter <b>MUST</b> be the same as the value of the <code>grant_type</code> parameter passed to the token endpoint defined in the grant type definition. Authorization servers <b>may</b> allow for other values as defined in the grant type extension process described in OAuth 2.0, Section 4.5. If omitted, the default behavior is that the client will use only the <code>authorization_code</code> Grant Type.  # noqa: E501

        :param grant_types: The grant_types of this ClientDetails.  # noqa: E501
        :type: list[str]
        """

        self._grant_types = grant_types

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

        The URL string pointing to a human-readable privacy policy document that describes how the third party provider collects, uses, retains, and discloses personal data.<br/><br/><span class=\"tablenote\"><b>Note:</b> Only HTTPS URLs are supported for <code>policy_uri</code> strings.</span><br/><span class=\"tablenote\"><b>Note:</b> This URL <b>must not</b> point to the eBay Privacy Policy.</span><br/>The authorization server should display this secure URL to the end-user if it is provided. The value of this field <b>must</b> point to a valid and secure web page.<br/><br/><span class=\"tablenote\"><b>Note:</b> Language tags are not supported. Therefore, <code>policy_uri</code> will be displayed in English.</span>  # noqa: E501

        :return: The policy_uri of this ClientDetails.  # noqa: E501
        :rtype: str
        """
        return self._policy_uri

    @policy_uri.setter
    def policy_uri(self, policy_uri):
        """Sets the policy_uri of this ClientDetails.

        The URL string pointing to a human-readable privacy policy document that describes how the third party provider collects, uses, retains, and discloses personal data.<br/><br/><span class=\"tablenote\"><b>Note:</b> Only HTTPS URLs are supported for <code>policy_uri</code> strings.</span><br/><span class=\"tablenote\"><b>Note:</b> This URL <b>must not</b> point to the eBay Privacy Policy.</span><br/>The authorization server should display this secure URL to the end-user if it is provided. The value of this field <b>must</b> point to a valid and secure web page.<br/><br/><span class=\"tablenote\"><b>Note:</b> Language tags are not supported. Therefore, <code>policy_uri</code> will be displayed in English.</span>  # noqa: E501

        :param policy_uri: The policy_uri of this ClientDetails.  # noqa: E501
        :type: str
        """

        self._policy_uri = policy_uri

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

        An eBay system-generated value assigned to the application. This value represents the redirect uri(s) submitted by the user either in the request payload (i.e., the <code>redirect_uris</code> field,) or the <code>software_statement</code>.  # noqa: E501

        :return: The redirect_uris of this ClientDetails.  # noqa: E501
        :rtype: list[str]
        """
        return self._redirect_uris

    @redirect_uris.setter
    def redirect_uris(self, redirect_uris):
        """Sets the redirect_uris of this ClientDetails.

        An eBay system-generated value assigned to the application. This value represents the redirect uri(s) submitted by the user either in the request payload (i.e., the <code>redirect_uris</code> field,) or the <code>software_statement</code>.  # noqa: E501

        :param redirect_uris: The redirect_uris of this ClientDetails.  # noqa: E501
        :type: list[str]
        """

        self._redirect_uris = redirect_uris

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

        String containing a space-separated list of scope values (as described in Section 3.3 of OAuth 2.0 [RFC6749]) that the client can use when requesting access tokens. The semantics of values in this list are service specific.  # noqa: E501

        :return: The scope of this ClientDetails.  # noqa: E501
        :rtype: str
        """
        return self._scope

    @scope.setter
    def scope(self, scope):
        """Sets the scope of this ClientDetails.

        String containing a space-separated list of scope values (as described in Section 3.3 of OAuth 2.0 [RFC6749]) that the client can use when requesting access tokens. The semantics of values in this list are service specific.  # noqa: E501

        :param scope: The scope of this ClientDetails.  # noqa: E501
        :type: str
        """

        self._scope = scope

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

        A unique identifier string provided by the client developer or software publisher at the time of registration that identifies the client software being registered.<br/><br/>Unlike <code>client_id</code> which should change between instances, the <CODE>software_id</code> should be the same value for all instances of the client software. That is, the <code>software_id</code> should remain unchanged across multiple updates or versions of the same piece of software.  # noqa: E501

        :return: The software_id of this ClientDetails.  # noqa: E501
        :rtype: str
        """
        return self._software_id

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

        A unique identifier string provided by the client developer or software publisher at the time of registration that identifies the client software being registered.<br/><br/>Unlike <code>client_id</code> which should change between instances, the <CODE>software_id</code> should be the same value for all instances of the client software. That is, the <code>software_id</code> should remain unchanged across multiple updates or versions of the same piece of software.  # noqa: E501

        :param software_id: The software_id of this ClientDetails.  # noqa: E501
        :type: str
        """

        self._software_id = software_id

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

        The Software Statement Assertion (SSA), a JSON Web Token (JWT), that has been issued by the OpenBanking identifier. Refer to <a href=\"https://datatracker.ietf.org/doc/html/rfc7591#section-2.3 \" target= \"_blank \">RFC 7591 - OAuth 2.0 Dynamic Client Registration Protocol</a> for complete information.  # noqa: E501

        :return: The software_statement of this ClientDetails.  # noqa: E501
        :rtype: str
        """
        return self._software_statement

    @software_statement.setter
    def software_statement(self, software_statement):
        """Sets the software_statement of this ClientDetails.

        The Software Statement Assertion (SSA), a JSON Web Token (JWT), that has been issued by the OpenBanking identifier. Refer to <a href=\"https://datatracker.ietf.org/doc/html/rfc7591#section-2.3 \" target= \"_blank \">RFC 7591 - OAuth 2.0 Dynamic Client Registration Protocol</a> for complete information.  # noqa: E501

        :param software_statement: The software_statement of this ClientDetails.  # noqa: E501
        :type: str
        """

        self._software_statement = software_statement

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

        return self.__dict__ == other.__dict__

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