# coding: utf-8

"""
    external/v1/auth_service.proto

    No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)  # noqa: E501

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

    NOTE
    ----
    standard swagger-codegen-cli for this python client has been modified
    by custom templates. The purpose of these templates is to include
    typing information in the API and Model code. Please refer to the
    main grid repository for more info
"""

import pprint
import re  # noqa: F401

from typing import TYPE_CHECKING

import six

if TYPE_CHECKING:
    from datetime import datetime
    from lightning_cloud.openapi.models import *

class V1GetUserResponse(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 = {
        'agree_to_terms_and_conditions': 'bool',
        'api_key': 'str',
        'country': 'str',
        'email': 'str',
        'features': 'V1UserFeatures',
        'first_name': 'str',
        'general_audience_mode': 'bool',
        'id': 'str',
        'internal_docs_admin': 'bool',
        'is_internal': 'bool',
        'last_name': 'str',
        'opted_in_marketing_emails': 'bool',
        'organization': 'str',
        'organizations': 'list[V1Organization]',
        'picture_url': 'str',
        'preferred_color_scheme': 'str',
        'preferred_ide': 'str',
        'preferred_vscode_marketplace': 'str',
        'role': 'str',
        'saw_create_first_project_dialog': 'bool',
        'saw_forums_login_merge_dialog': 'bool',
        'saw_free_credits_notification': 'bool',
        'status': 'Externalv1UserStatus',
        'user_metadata': 'str',
        'username': 'str',
        'waitlisted': 'bool',
        'website': 'str'
    }

    attribute_map = {
        'agree_to_terms_and_conditions': 'agreeToTermsAndConditions',
        'api_key': 'apiKey',
        'country': 'country',
        'email': 'email',
        'features': 'features',
        'first_name': 'firstName',
        'general_audience_mode': 'generalAudienceMode',
        'id': 'id',
        'internal_docs_admin': 'internalDocsAdmin',
        'is_internal': 'isInternal',
        'last_name': 'lastName',
        'opted_in_marketing_emails': 'optedInMarketingEmails',
        'organization': 'organization',
        'organizations': 'organizations',
        'picture_url': 'pictureUrl',
        'preferred_color_scheme': 'preferredColorScheme',
        'preferred_ide': 'preferredIde',
        'preferred_vscode_marketplace': 'preferredVscodeMarketplace',
        'role': 'role',
        'saw_create_first_project_dialog': 'sawCreateFirstProjectDialog',
        'saw_forums_login_merge_dialog': 'sawForumsLoginMergeDialog',
        'saw_free_credits_notification': 'sawFreeCreditsNotification',
        'status': 'status',
        'user_metadata': 'userMetadata',
        'username': 'username',
        'waitlisted': 'waitlisted',
        'website': 'website'
    }

    def __init__(self, agree_to_terms_and_conditions: 'bool' =None, api_key: 'str' =None, country: 'str' =None, email: 'str' =None, features: 'V1UserFeatures' =None, first_name: 'str' =None, general_audience_mode: 'bool' =None, id: 'str' =None, internal_docs_admin: 'bool' =None, is_internal: 'bool' =None, last_name: 'str' =None, opted_in_marketing_emails: 'bool' =None, organization: 'str' =None, organizations: 'list[V1Organization]' =None, picture_url: 'str' =None, preferred_color_scheme: 'str' =None, preferred_ide: 'str' =None, preferred_vscode_marketplace: 'str' =None, role: 'str' =None, saw_create_first_project_dialog: 'bool' =None, saw_forums_login_merge_dialog: 'bool' =None, saw_free_credits_notification: 'bool' =None, status: 'Externalv1UserStatus' =None, user_metadata: 'str' =None, username: 'str' =None, waitlisted: 'bool' =None, website: 'str' =None):  # noqa: E501
        """V1GetUserResponse - a model defined in Swagger"""  # noqa: E501
        self._agree_to_terms_and_conditions = None
        self._api_key = None
        self._country = None
        self._email = None
        self._features = None
        self._first_name = None
        self._general_audience_mode = None
        self._id = None
        self._internal_docs_admin = None
        self._is_internal = None
        self._last_name = None
        self._opted_in_marketing_emails = None
        self._organization = None
        self._organizations = None
        self._picture_url = None
        self._preferred_color_scheme = None
        self._preferred_ide = None
        self._preferred_vscode_marketplace = None
        self._role = None
        self._saw_create_first_project_dialog = None
        self._saw_forums_login_merge_dialog = None
        self._saw_free_credits_notification = None
        self._status = None
        self._user_metadata = None
        self._username = None
        self._waitlisted = None
        self._website = None
        self.discriminator = None
        if agree_to_terms_and_conditions is not None:
            self.agree_to_terms_and_conditions = agree_to_terms_and_conditions
        if api_key is not None:
            self.api_key = api_key
        if country is not None:
            self.country = country
        if email is not None:
            self.email = email
        if features is not None:
            self.features = features
        if first_name is not None:
            self.first_name = first_name
        if general_audience_mode is not None:
            self.general_audience_mode = general_audience_mode
        if id is not None:
            self.id = id
        if internal_docs_admin is not None:
            self.internal_docs_admin = internal_docs_admin
        if is_internal is not None:
            self.is_internal = is_internal
        if last_name is not None:
            self.last_name = last_name
        if opted_in_marketing_emails is not None:
            self.opted_in_marketing_emails = opted_in_marketing_emails
        if organization is not None:
            self.organization = organization
        if organizations is not None:
            self.organizations = organizations
        if picture_url is not None:
            self.picture_url = picture_url
        if preferred_color_scheme is not None:
            self.preferred_color_scheme = preferred_color_scheme
        if preferred_ide is not None:
            self.preferred_ide = preferred_ide
        if preferred_vscode_marketplace is not None:
            self.preferred_vscode_marketplace = preferred_vscode_marketplace
        if role is not None:
            self.role = role
        if saw_create_first_project_dialog is not None:
            self.saw_create_first_project_dialog = saw_create_first_project_dialog
        if saw_forums_login_merge_dialog is not None:
            self.saw_forums_login_merge_dialog = saw_forums_login_merge_dialog
        if saw_free_credits_notification is not None:
            self.saw_free_credits_notification = saw_free_credits_notification
        if status is not None:
            self.status = status
        if user_metadata is not None:
            self.user_metadata = user_metadata
        if username is not None:
            self.username = username
        if waitlisted is not None:
            self.waitlisted = waitlisted
        if website is not None:
            self.website = website

    @property
    def agree_to_terms_and_conditions(self) -> 'bool':
        """Gets the agree_to_terms_and_conditions of this V1GetUserResponse.  # noqa: E501


        :return: The agree_to_terms_and_conditions of this V1GetUserResponse.  # noqa: E501
        :rtype: bool
        """
        return self._agree_to_terms_and_conditions

    @agree_to_terms_and_conditions.setter
    def agree_to_terms_and_conditions(self, agree_to_terms_and_conditions: 'bool'):
        """Sets the agree_to_terms_and_conditions of this V1GetUserResponse.


        :param agree_to_terms_and_conditions: The agree_to_terms_and_conditions of this V1GetUserResponse.  # noqa: E501
        :type: bool
        """

        self._agree_to_terms_and_conditions = agree_to_terms_and_conditions

    @property
    def api_key(self) -> 'str':
        """Gets the api_key of this V1GetUserResponse.  # noqa: E501


        :return: The api_key of this V1GetUserResponse.  # noqa: E501
        :rtype: str
        """
        return self._api_key

    @api_key.setter
    def api_key(self, api_key: 'str'):
        """Sets the api_key of this V1GetUserResponse.


        :param api_key: The api_key of this V1GetUserResponse.  # noqa: E501
        :type: str
        """

        self._api_key = api_key

    @property
    def country(self) -> 'str':
        """Gets the country of this V1GetUserResponse.  # noqa: E501


        :return: The country of this V1GetUserResponse.  # noqa: E501
        :rtype: str
        """
        return self._country

    @country.setter
    def country(self, country: 'str'):
        """Sets the country of this V1GetUserResponse.


        :param country: The country of this V1GetUserResponse.  # noqa: E501
        :type: str
        """

        self._country = country

    @property
    def email(self) -> 'str':
        """Gets the email of this V1GetUserResponse.  # noqa: E501


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

    @email.setter
    def email(self, email: 'str'):
        """Sets the email of this V1GetUserResponse.


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

        self._email = email

    @property
    def features(self) -> 'V1UserFeatures':
        """Gets the features of this V1GetUserResponse.  # noqa: E501


        :return: The features of this V1GetUserResponse.  # noqa: E501
        :rtype: V1UserFeatures
        """
        return self._features

    @features.setter
    def features(self, features: 'V1UserFeatures'):
        """Sets the features of this V1GetUserResponse.


        :param features: The features of this V1GetUserResponse.  # noqa: E501
        :type: V1UserFeatures
        """

        self._features = features

    @property
    def first_name(self) -> 'str':
        """Gets the first_name of this V1GetUserResponse.  # noqa: E501


        :return: The first_name of this V1GetUserResponse.  # noqa: E501
        :rtype: str
        """
        return self._first_name

    @first_name.setter
    def first_name(self, first_name: 'str'):
        """Sets the first_name of this V1GetUserResponse.


        :param first_name: The first_name of this V1GetUserResponse.  # noqa: E501
        :type: str
        """

        self._first_name = first_name

    @property
    def general_audience_mode(self) -> 'bool':
        """Gets the general_audience_mode of this V1GetUserResponse.  # noqa: E501


        :return: The general_audience_mode of this V1GetUserResponse.  # noqa: E501
        :rtype: bool
        """
        return self._general_audience_mode

    @general_audience_mode.setter
    def general_audience_mode(self, general_audience_mode: 'bool'):
        """Sets the general_audience_mode of this V1GetUserResponse.


        :param general_audience_mode: The general_audience_mode of this V1GetUserResponse.  # noqa: E501
        :type: bool
        """

        self._general_audience_mode = general_audience_mode

    @property
    def id(self) -> 'str':
        """Gets the id of this V1GetUserResponse.  # noqa: E501


        :return: The id of this V1GetUserResponse.  # noqa: E501
        :rtype: str
        """
        return self._id

    @id.setter
    def id(self, id: 'str'):
        """Sets the id of this V1GetUserResponse.


        :param id: The id of this V1GetUserResponse.  # noqa: E501
        :type: str
        """

        self._id = id

    @property
    def internal_docs_admin(self) -> 'bool':
        """Gets the internal_docs_admin of this V1GetUserResponse.  # noqa: E501


        :return: The internal_docs_admin of this V1GetUserResponse.  # noqa: E501
        :rtype: bool
        """
        return self._internal_docs_admin

    @internal_docs_admin.setter
    def internal_docs_admin(self, internal_docs_admin: 'bool'):
        """Sets the internal_docs_admin of this V1GetUserResponse.


        :param internal_docs_admin: The internal_docs_admin of this V1GetUserResponse.  # noqa: E501
        :type: bool
        """

        self._internal_docs_admin = internal_docs_admin

    @property
    def is_internal(self) -> 'bool':
        """Gets the is_internal of this V1GetUserResponse.  # noqa: E501


        :return: The is_internal of this V1GetUserResponse.  # noqa: E501
        :rtype: bool
        """
        return self._is_internal

    @is_internal.setter
    def is_internal(self, is_internal: 'bool'):
        """Sets the is_internal of this V1GetUserResponse.


        :param is_internal: The is_internal of this V1GetUserResponse.  # noqa: E501
        :type: bool
        """

        self._is_internal = is_internal

    @property
    def last_name(self) -> 'str':
        """Gets the last_name of this V1GetUserResponse.  # noqa: E501


        :return: The last_name of this V1GetUserResponse.  # noqa: E501
        :rtype: str
        """
        return self._last_name

    @last_name.setter
    def last_name(self, last_name: 'str'):
        """Sets the last_name of this V1GetUserResponse.


        :param last_name: The last_name of this V1GetUserResponse.  # noqa: E501
        :type: str
        """

        self._last_name = last_name

    @property
    def opted_in_marketing_emails(self) -> 'bool':
        """Gets the opted_in_marketing_emails of this V1GetUserResponse.  # noqa: E501


        :return: The opted_in_marketing_emails of this V1GetUserResponse.  # noqa: E501
        :rtype: bool
        """
        return self._opted_in_marketing_emails

    @opted_in_marketing_emails.setter
    def opted_in_marketing_emails(self, opted_in_marketing_emails: 'bool'):
        """Sets the opted_in_marketing_emails of this V1GetUserResponse.


        :param opted_in_marketing_emails: The opted_in_marketing_emails of this V1GetUserResponse.  # noqa: E501
        :type: bool
        """

        self._opted_in_marketing_emails = opted_in_marketing_emails

    @property
    def organization(self) -> 'str':
        """Gets the organization of this V1GetUserResponse.  # noqa: E501


        :return: The organization of this V1GetUserResponse.  # noqa: E501
        :rtype: str
        """
        return self._organization

    @organization.setter
    def organization(self, organization: 'str'):
        """Sets the organization of this V1GetUserResponse.


        :param organization: The organization of this V1GetUserResponse.  # noqa: E501
        :type: str
        """

        self._organization = organization

    @property
    def organizations(self) -> 'list[V1Organization]':
        """Gets the organizations of this V1GetUserResponse.  # noqa: E501


        :return: The organizations of this V1GetUserResponse.  # noqa: E501
        :rtype: list[V1Organization]
        """
        return self._organizations

    @organizations.setter
    def organizations(self, organizations: 'list[V1Organization]'):
        """Sets the organizations of this V1GetUserResponse.


        :param organizations: The organizations of this V1GetUserResponse.  # noqa: E501
        :type: list[V1Organization]
        """

        self._organizations = organizations

    @property
    def picture_url(self) -> 'str':
        """Gets the picture_url of this V1GetUserResponse.  # noqa: E501


        :return: The picture_url of this V1GetUserResponse.  # noqa: E501
        :rtype: str
        """
        return self._picture_url

    @picture_url.setter
    def picture_url(self, picture_url: 'str'):
        """Sets the picture_url of this V1GetUserResponse.


        :param picture_url: The picture_url of this V1GetUserResponse.  # noqa: E501
        :type: str
        """

        self._picture_url = picture_url

    @property
    def preferred_color_scheme(self) -> 'str':
        """Gets the preferred_color_scheme of this V1GetUserResponse.  # noqa: E501


        :return: The preferred_color_scheme of this V1GetUserResponse.  # noqa: E501
        :rtype: str
        """
        return self._preferred_color_scheme

    @preferred_color_scheme.setter
    def preferred_color_scheme(self, preferred_color_scheme: 'str'):
        """Sets the preferred_color_scheme of this V1GetUserResponse.


        :param preferred_color_scheme: The preferred_color_scheme of this V1GetUserResponse.  # noqa: E501
        :type: str
        """

        self._preferred_color_scheme = preferred_color_scheme

    @property
    def preferred_ide(self) -> 'str':
        """Gets the preferred_ide of this V1GetUserResponse.  # noqa: E501


        :return: The preferred_ide of this V1GetUserResponse.  # noqa: E501
        :rtype: str
        """
        return self._preferred_ide

    @preferred_ide.setter
    def preferred_ide(self, preferred_ide: 'str'):
        """Sets the preferred_ide of this V1GetUserResponse.


        :param preferred_ide: The preferred_ide of this V1GetUserResponse.  # noqa: E501
        :type: str
        """

        self._preferred_ide = preferred_ide

    @property
    def preferred_vscode_marketplace(self) -> 'str':
        """Gets the preferred_vscode_marketplace of this V1GetUserResponse.  # noqa: E501


        :return: The preferred_vscode_marketplace of this V1GetUserResponse.  # noqa: E501
        :rtype: str
        """
        return self._preferred_vscode_marketplace

    @preferred_vscode_marketplace.setter
    def preferred_vscode_marketplace(self, preferred_vscode_marketplace: 'str'):
        """Sets the preferred_vscode_marketplace of this V1GetUserResponse.


        :param preferred_vscode_marketplace: The preferred_vscode_marketplace of this V1GetUserResponse.  # noqa: E501
        :type: str
        """

        self._preferred_vscode_marketplace = preferred_vscode_marketplace

    @property
    def role(self) -> 'str':
        """Gets the role of this V1GetUserResponse.  # noqa: E501


        :return: The role of this V1GetUserResponse.  # noqa: E501
        :rtype: str
        """
        return self._role

    @role.setter
    def role(self, role: 'str'):
        """Sets the role of this V1GetUserResponse.


        :param role: The role of this V1GetUserResponse.  # noqa: E501
        :type: str
        """

        self._role = role

    @property
    def saw_create_first_project_dialog(self) -> 'bool':
        """Gets the saw_create_first_project_dialog of this V1GetUserResponse.  # noqa: E501


        :return: The saw_create_first_project_dialog of this V1GetUserResponse.  # noqa: E501
        :rtype: bool
        """
        return self._saw_create_first_project_dialog

    @saw_create_first_project_dialog.setter
    def saw_create_first_project_dialog(self, saw_create_first_project_dialog: 'bool'):
        """Sets the saw_create_first_project_dialog of this V1GetUserResponse.


        :param saw_create_first_project_dialog: The saw_create_first_project_dialog of this V1GetUserResponse.  # noqa: E501
        :type: bool
        """

        self._saw_create_first_project_dialog = saw_create_first_project_dialog

    @property
    def saw_forums_login_merge_dialog(self) -> 'bool':
        """Gets the saw_forums_login_merge_dialog of this V1GetUserResponse.  # noqa: E501


        :return: The saw_forums_login_merge_dialog of this V1GetUserResponse.  # noqa: E501
        :rtype: bool
        """
        return self._saw_forums_login_merge_dialog

    @saw_forums_login_merge_dialog.setter
    def saw_forums_login_merge_dialog(self, saw_forums_login_merge_dialog: 'bool'):
        """Sets the saw_forums_login_merge_dialog of this V1GetUserResponse.


        :param saw_forums_login_merge_dialog: The saw_forums_login_merge_dialog of this V1GetUserResponse.  # noqa: E501
        :type: bool
        """

        self._saw_forums_login_merge_dialog = saw_forums_login_merge_dialog

    @property
    def saw_free_credits_notification(self) -> 'bool':
        """Gets the saw_free_credits_notification of this V1GetUserResponse.  # noqa: E501


        :return: The saw_free_credits_notification of this V1GetUserResponse.  # noqa: E501
        :rtype: bool
        """
        return self._saw_free_credits_notification

    @saw_free_credits_notification.setter
    def saw_free_credits_notification(self, saw_free_credits_notification: 'bool'):
        """Sets the saw_free_credits_notification of this V1GetUserResponse.


        :param saw_free_credits_notification: The saw_free_credits_notification of this V1GetUserResponse.  # noqa: E501
        :type: bool
        """

        self._saw_free_credits_notification = saw_free_credits_notification

    @property
    def status(self) -> 'Externalv1UserStatus':
        """Gets the status of this V1GetUserResponse.  # noqa: E501


        :return: The status of this V1GetUserResponse.  # noqa: E501
        :rtype: Externalv1UserStatus
        """
        return self._status

    @status.setter
    def status(self, status: 'Externalv1UserStatus'):
        """Sets the status of this V1GetUserResponse.


        :param status: The status of this V1GetUserResponse.  # noqa: E501
        :type: Externalv1UserStatus
        """

        self._status = status

    @property
    def user_metadata(self) -> 'str':
        """Gets the user_metadata of this V1GetUserResponse.  # noqa: E501


        :return: The user_metadata of this V1GetUserResponse.  # noqa: E501
        :rtype: str
        """
        return self._user_metadata

    @user_metadata.setter
    def user_metadata(self, user_metadata: 'str'):
        """Sets the user_metadata of this V1GetUserResponse.


        :param user_metadata: The user_metadata of this V1GetUserResponse.  # noqa: E501
        :type: str
        """

        self._user_metadata = user_metadata

    @property
    def username(self) -> 'str':
        """Gets the username of this V1GetUserResponse.  # noqa: E501


        :return: The username of this V1GetUserResponse.  # noqa: E501
        :rtype: str
        """
        return self._username

    @username.setter
    def username(self, username: 'str'):
        """Sets the username of this V1GetUserResponse.


        :param username: The username of this V1GetUserResponse.  # noqa: E501
        :type: str
        """

        self._username = username

    @property
    def waitlisted(self) -> 'bool':
        """Gets the waitlisted of this V1GetUserResponse.  # noqa: E501


        :return: The waitlisted of this V1GetUserResponse.  # noqa: E501
        :rtype: bool
        """
        return self._waitlisted

    @waitlisted.setter
    def waitlisted(self, waitlisted: 'bool'):
        """Sets the waitlisted of this V1GetUserResponse.


        :param waitlisted: The waitlisted of this V1GetUserResponse.  # noqa: E501
        :type: bool
        """

        self._waitlisted = waitlisted

    @property
    def website(self) -> 'str':
        """Gets the website of this V1GetUserResponse.  # noqa: E501


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

    @website.setter
    def website(self, website: 'str'):
        """Sets the website of this V1GetUserResponse.


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

        self._website = website

    def to_dict(self) -> dict:
        """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(V1GetUserResponse, dict):
            for key, value in self.items():
                result[key] = value

        return result

    def to_str(self) -> str:
        """Returns the string representation of the model"""
        return pprint.pformat(self.to_dict())

    def __repr__(self) -> str:
        """For `print` and `pprint`"""
        return self.to_str()

    def __eq__(self, other: 'V1GetUserResponse') -> bool:
        """Returns true if both objects are equal"""
        if not isinstance(other, V1GetUserResponse):
            return False

        return self.__dict__ == other.__dict__

    def __ne__(self, other: 'V1GetUserResponse') -> bool:
        """Returns true if both objects are not equal"""
        return not self == other
