# coding: utf-8

"""
    Verification API

    # Introduction  <span class=\"subtext\"> Welcome to the Passbase Verifications API docs. This documentation will help you understand our models and the Verification API with its endpoints. Based on this you can build your own system (i.e. verification) and hook it up to Passbase.  In case of feedback or questions you can reach us under this email address: [developer@passbase.com](mailto:developer@passbase.com). </span>  A User submits a video selfie and valid identifying __Resources__ during a __Verification__ guided by the Passbase client-side integration. Once all the necessary __Resources__ are submitted, __Data points__ are extracted, digitized, and authenticated. These Data points then becomes part of the User's __Identity__. The User then consents to share __Resources__ and/or __Data points__ from their Identity with you. This information is passed to you and can be used to make decisions about a User (e.g. activate account). This table below explains our terminology further.  | Term                                    | Description | |-----------------------------------------|-------------| | [Identity](#tag/identity_model)         | A set of Data points and Resources related to and owned by one single User. This data can be accessed by you through a Verification. | | Data points                             | Any data about a User extracted from a Resource (E.g. Passport Number, or Age). | | [Resource](#tag/resource_model)         | A source document used to generate the Data points for a User (E.g. Passport). | | [User](#tag/user_model)                 | The owner of an email address associated with an Identity. | | Verification                            | A transaction through which a User consents to share Data points with you. If the Data points you request are not already available in the User's Identity, the Passbase client will ask the User to submit the necessary Resource required to extract them. | | Re-authentication (login)               | A transaction through which a User can certify the ownership of Personal data previously shared through an Authentication. |   # Authentication  <span class=\"subtext\"> There are two forms of authentication for the API: <br/>&bull; API Key <br/>&bull; Bearer JWT Token  </span>   # noqa: E501

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

import pprint
import re  # noqa: F401

import six

class User(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 = {
        'email': 'str',
        'identity_access_token': 'str',
        'required_steps': 'list[ProjectSettingsVerificationSteps]'
    }

    attribute_map = {
        'email': 'email',
        'identity_access_token': 'identity_access_token',
        'required_steps': 'required_steps'
    }

    def __init__(self, email=None, identity_access_token=None, required_steps=None):  # noqa: E501
        """User - a model defined in Swagger"""  # noqa: E501
        self._email = None
        self._identity_access_token = None
        self._required_steps = None
        self.discriminator = None
        if email is not None:
            self.email = email
        if identity_access_token is not None:
            self.identity_access_token = identity_access_token
        if required_steps is not None:
            self.required_steps = required_steps

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

        Email with which the user was created  # noqa: E501

        :return: The email of this User.  # noqa: E501
        :rtype: str
        """
        return self._email

    @email.setter
    def email(self, email):
        """Sets the email of this User.

        Email with which the user was created  # noqa: E501

        :param email: The email of this User.  # noqa: E501
        :type: str
        """

        self._email = email

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

        Access token in the shape of a JsonWebToken used as a Bearer token when submitting identity data   # noqa: E501

        :return: The identity_access_token of this User.  # noqa: E501
        :rtype: str
        """
        return self._identity_access_token

    @identity_access_token.setter
    def identity_access_token(self, identity_access_token):
        """Sets the identity_access_token of this User.

        Access token in the shape of a JsonWebToken used as a Bearer token when submitting identity data   # noqa: E501

        :param identity_access_token: The identity_access_token of this User.  # noqa: E501
        :type: str
        """

        self._identity_access_token = identity_access_token

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

        List of the steps through which the user must go through to complete their verification   # noqa: E501

        :return: The required_steps of this User.  # noqa: E501
        :rtype: list[ProjectSettingsVerificationSteps]
        """
        return self._required_steps

    @required_steps.setter
    def required_steps(self, required_steps):
        """Sets the required_steps of this User.

        List of the steps through which the user must go through to complete their verification   # noqa: E501

        :param required_steps: The required_steps of this User.  # noqa: E501
        :type: list[ProjectSettingsVerificationSteps]
        """

        self._required_steps = required_steps

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

        return self.__dict__ == other.__dict__

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