# coding: utf-8

"""
    StockX API

    PRERELEASE API - Subject to change before release. Provides access to StockX's public services, allowing end users to query for product and order information.  # 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

from io_stockx.models.billing_object import BillingObject  # noqa: F401,E501
from io_stockx.models.customer_object_merchant import CustomerObjectMerchant  # noqa: F401,E501
from io_stockx.models.customer_object_security import CustomerObjectSecurity  # noqa: F401,E501
from io_stockx.models.customer_object_shipping import CustomerObjectShipping  # noqa: F401,E501


class CustomerObject(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 = {
        'id': 'str',
        'uuid': 'str',
        'first_name': 'str',
        'last_name': 'str',
        'full_name': 'str',
        'email': 'str',
        'username': 'str',
        'email_verified': 'bool',
        'default_size': 'str',
        'categories': 'list[str]',
        'default_category': 'str',
        'vacation_date': 'str',
        'is_active': 'bool',
        'flagged': 'bool',
        'hide_portfolio_banner': 'bool',
        'refer_url': 'str',
        'created_at': 'str',
        'created_at_time': 'float',
        'is_trader': 'bool',
        'ship_by_date': 'bool',
        'is_buying': 'bool',
        'is_selling': 'bool',
        'billing': 'BillingObject',
        'shipping': 'CustomerObjectShipping',
        'cc_only': 'BillingObject',
        'merchant': 'CustomerObjectMerchant',
        'promotion_code': 'str',
        'paypal_emails': 'str',
        'authorization_method': 'str',
        'security_override': 'bool',
        'team_member': 'bool',
        'password_locked': 'bool',
        'address_normalize_override': 'bool',
        'early_payout_enabled': 'bool',
        'early_payout_eligible': 'bool',
        'security': 'CustomerObjectSecurity'
    }

    attribute_map = {
        'id': 'id',
        'uuid': 'uuid',
        'first_name': 'firstName',
        'last_name': 'lastName',
        'full_name': 'fullName',
        'email': 'email',
        'username': 'username',
        'email_verified': 'emailVerified',
        'default_size': 'defaultSize',
        'categories': 'categories',
        'default_category': 'defaultCategory',
        'vacation_date': 'vacationDate',
        'is_active': 'isActive',
        'flagged': 'flagged',
        'hide_portfolio_banner': 'hidePortfolioBanner',
        'refer_url': 'referUrl',
        'created_at': 'createdAt',
        'created_at_time': 'createdAtTime',
        'is_trader': 'isTrader',
        'ship_by_date': 'shipByDate',
        'is_buying': 'isBuying',
        'is_selling': 'isSelling',
        'billing': 'Billing',
        'shipping': 'Shipping',
        'cc_only': 'CCOnly',
        'merchant': 'Merchant',
        'promotion_code': 'promotionCode',
        'paypal_emails': 'paypalEmails',
        'authorization_method': 'authorizationMethod',
        'security_override': 'securityOverride',
        'team_member': 'teamMember',
        'password_locked': 'passwordLocked',
        'address_normalize_override': 'addressNormalizeOverride',
        'early_payout_enabled': 'earlyPayoutEnabled',
        'early_payout_eligible': 'earlyPayoutEligible',
        'security': 'security'
    }

    def __init__(self, id=None, uuid=None, first_name=None, last_name=None, full_name=None, email=None, username=None, email_verified=None, default_size=None, categories=None, default_category=None, vacation_date=None, is_active=None, flagged=None, hide_portfolio_banner=None, refer_url=None, created_at=None, created_at_time=None, is_trader=None, ship_by_date=None, is_buying=None, is_selling=None, billing=None, shipping=None, cc_only=None, merchant=None, promotion_code=None, paypal_emails=None, authorization_method=None, security_override=None, team_member=None, password_locked=None, address_normalize_override=None, early_payout_enabled=None, early_payout_eligible=None, security=None):  # noqa: E501
        """CustomerObject - a model defined in Swagger"""  # noqa: E501

        self._id = None
        self._uuid = None
        self._first_name = None
        self._last_name = None
        self._full_name = None
        self._email = None
        self._username = None
        self._email_verified = None
        self._default_size = None
        self._categories = None
        self._default_category = None
        self._vacation_date = None
        self._is_active = None
        self._flagged = None
        self._hide_portfolio_banner = None
        self._refer_url = None
        self._created_at = None
        self._created_at_time = None
        self._is_trader = None
        self._ship_by_date = None
        self._is_buying = None
        self._is_selling = None
        self._billing = None
        self._shipping = None
        self._cc_only = None
        self._merchant = None
        self._promotion_code = None
        self._paypal_emails = None
        self._authorization_method = None
        self._security_override = None
        self._team_member = None
        self._password_locked = None
        self._address_normalize_override = None
        self._early_payout_enabled = None
        self._early_payout_eligible = None
        self._security = None
        self.discriminator = None

        if id is not None:
            self.id = id
        if uuid is not None:
            self.uuid = uuid
        if first_name is not None:
            self.first_name = first_name
        if last_name is not None:
            self.last_name = last_name
        if full_name is not None:
            self.full_name = full_name
        if email is not None:
            self.email = email
        if username is not None:
            self.username = username
        if email_verified is not None:
            self.email_verified = email_verified
        if default_size is not None:
            self.default_size = default_size
        if categories is not None:
            self.categories = categories
        if default_category is not None:
            self.default_category = default_category
        if vacation_date is not None:
            self.vacation_date = vacation_date
        if is_active is not None:
            self.is_active = is_active
        if flagged is not None:
            self.flagged = flagged
        if hide_portfolio_banner is not None:
            self.hide_portfolio_banner = hide_portfolio_banner
        if refer_url is not None:
            self.refer_url = refer_url
        if created_at is not None:
            self.created_at = created_at
        if created_at_time is not None:
            self.created_at_time = created_at_time
        if is_trader is not None:
            self.is_trader = is_trader
        if ship_by_date is not None:
            self.ship_by_date = ship_by_date
        if is_buying is not None:
            self.is_buying = is_buying
        if is_selling is not None:
            self.is_selling = is_selling
        if billing is not None:
            self.billing = billing
        if shipping is not None:
            self.shipping = shipping
        if cc_only is not None:
            self.cc_only = cc_only
        if merchant is not None:
            self.merchant = merchant
        if promotion_code is not None:
            self.promotion_code = promotion_code
        if paypal_emails is not None:
            self.paypal_emails = paypal_emails
        if authorization_method is not None:
            self.authorization_method = authorization_method
        if security_override is not None:
            self.security_override = security_override
        if team_member is not None:
            self.team_member = team_member
        if password_locked is not None:
            self.password_locked = password_locked
        if address_normalize_override is not None:
            self.address_normalize_override = address_normalize_override
        if early_payout_enabled is not None:
            self.early_payout_enabled = early_payout_enabled
        if early_payout_eligible is not None:
            self.early_payout_eligible = early_payout_eligible
        if security is not None:
            self.security = security

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


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

    @id.setter
    def id(self, id):
        """Sets the id of this CustomerObject.


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

        self._id = id

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


        :return: The uuid of this CustomerObject.  # noqa: E501
        :rtype: str
        """
        return self._uuid

    @uuid.setter
    def uuid(self, uuid):
        """Sets the uuid of this CustomerObject.


        :param uuid: The uuid of this CustomerObject.  # noqa: E501
        :type: str
        """

        self._uuid = uuid

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


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

    @first_name.setter
    def first_name(self, first_name):
        """Sets the first_name of this CustomerObject.


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

        self._first_name = first_name

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


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

    @last_name.setter
    def last_name(self, last_name):
        """Sets the last_name of this CustomerObject.


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

        self._last_name = last_name

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


        :return: The full_name of this CustomerObject.  # noqa: E501
        :rtype: str
        """
        return self._full_name

    @full_name.setter
    def full_name(self, full_name):
        """Sets the full_name of this CustomerObject.


        :param full_name: The full_name of this CustomerObject.  # noqa: E501
        :type: str
        """

        self._full_name = full_name

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


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

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


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

        self._email = email

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


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

    @username.setter
    def username(self, username):
        """Sets the username of this CustomerObject.


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

        self._username = username

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


        :return: The email_verified of this CustomerObject.  # noqa: E501
        :rtype: bool
        """
        return self._email_verified

    @email_verified.setter
    def email_verified(self, email_verified):
        """Sets the email_verified of this CustomerObject.


        :param email_verified: The email_verified of this CustomerObject.  # noqa: E501
        :type: bool
        """

        self._email_verified = email_verified

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


        :return: The default_size of this CustomerObject.  # noqa: E501
        :rtype: str
        """
        return self._default_size

    @default_size.setter
    def default_size(self, default_size):
        """Sets the default_size of this CustomerObject.


        :param default_size: The default_size of this CustomerObject.  # noqa: E501
        :type: str
        """

        self._default_size = default_size

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


        :return: The categories of this CustomerObject.  # noqa: E501
        :rtype: list[str]
        """
        return self._categories

    @categories.setter
    def categories(self, categories):
        """Sets the categories of this CustomerObject.


        :param categories: The categories of this CustomerObject.  # noqa: E501
        :type: list[str]
        """

        self._categories = categories

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


        :return: The default_category of this CustomerObject.  # noqa: E501
        :rtype: str
        """
        return self._default_category

    @default_category.setter
    def default_category(self, default_category):
        """Sets the default_category of this CustomerObject.


        :param default_category: The default_category of this CustomerObject.  # noqa: E501
        :type: str
        """

        self._default_category = default_category

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


        :return: The vacation_date of this CustomerObject.  # noqa: E501
        :rtype: str
        """
        return self._vacation_date

    @vacation_date.setter
    def vacation_date(self, vacation_date):
        """Sets the vacation_date of this CustomerObject.


        :param vacation_date: The vacation_date of this CustomerObject.  # noqa: E501
        :type: str
        """

        self._vacation_date = vacation_date

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


        :return: The is_active of this CustomerObject.  # noqa: E501
        :rtype: bool
        """
        return self._is_active

    @is_active.setter
    def is_active(self, is_active):
        """Sets the is_active of this CustomerObject.


        :param is_active: The is_active of this CustomerObject.  # noqa: E501
        :type: bool
        """

        self._is_active = is_active

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


        :return: The flagged of this CustomerObject.  # noqa: E501
        :rtype: bool
        """
        return self._flagged

    @flagged.setter
    def flagged(self, flagged):
        """Sets the flagged of this CustomerObject.


        :param flagged: The flagged of this CustomerObject.  # noqa: E501
        :type: bool
        """

        self._flagged = flagged

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


        :return: The hide_portfolio_banner of this CustomerObject.  # noqa: E501
        :rtype: bool
        """
        return self._hide_portfolio_banner

    @hide_portfolio_banner.setter
    def hide_portfolio_banner(self, hide_portfolio_banner):
        """Sets the hide_portfolio_banner of this CustomerObject.


        :param hide_portfolio_banner: The hide_portfolio_banner of this CustomerObject.  # noqa: E501
        :type: bool
        """

        self._hide_portfolio_banner = hide_portfolio_banner

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


        :return: The refer_url of this CustomerObject.  # noqa: E501
        :rtype: str
        """
        return self._refer_url

    @refer_url.setter
    def refer_url(self, refer_url):
        """Sets the refer_url of this CustomerObject.


        :param refer_url: The refer_url of this CustomerObject.  # noqa: E501
        :type: str
        """

        self._refer_url = refer_url

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


        :return: The created_at of this CustomerObject.  # noqa: E501
        :rtype: str
        """
        return self._created_at

    @created_at.setter
    def created_at(self, created_at):
        """Sets the created_at of this CustomerObject.


        :param created_at: The created_at of this CustomerObject.  # noqa: E501
        :type: str
        """

        self._created_at = created_at

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


        :return: The created_at_time of this CustomerObject.  # noqa: E501
        :rtype: float
        """
        return self._created_at_time

    @created_at_time.setter
    def created_at_time(self, created_at_time):
        """Sets the created_at_time of this CustomerObject.


        :param created_at_time: The created_at_time of this CustomerObject.  # noqa: E501
        :type: float
        """

        self._created_at_time = created_at_time

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


        :return: The is_trader of this CustomerObject.  # noqa: E501
        :rtype: bool
        """
        return self._is_trader

    @is_trader.setter
    def is_trader(self, is_trader):
        """Sets the is_trader of this CustomerObject.


        :param is_trader: The is_trader of this CustomerObject.  # noqa: E501
        :type: bool
        """

        self._is_trader = is_trader

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


        :return: The ship_by_date of this CustomerObject.  # noqa: E501
        :rtype: bool
        """
        return self._ship_by_date

    @ship_by_date.setter
    def ship_by_date(self, ship_by_date):
        """Sets the ship_by_date of this CustomerObject.


        :param ship_by_date: The ship_by_date of this CustomerObject.  # noqa: E501
        :type: bool
        """

        self._ship_by_date = ship_by_date

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


        :return: The is_buying of this CustomerObject.  # noqa: E501
        :rtype: bool
        """
        return self._is_buying

    @is_buying.setter
    def is_buying(self, is_buying):
        """Sets the is_buying of this CustomerObject.


        :param is_buying: The is_buying of this CustomerObject.  # noqa: E501
        :type: bool
        """

        self._is_buying = is_buying

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


        :return: The is_selling of this CustomerObject.  # noqa: E501
        :rtype: bool
        """
        return self._is_selling

    @is_selling.setter
    def is_selling(self, is_selling):
        """Sets the is_selling of this CustomerObject.


        :param is_selling: The is_selling of this CustomerObject.  # noqa: E501
        :type: bool
        """

        self._is_selling = is_selling

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


        :return: The billing of this CustomerObject.  # noqa: E501
        :rtype: BillingObject
        """
        return self._billing

    @billing.setter
    def billing(self, billing):
        """Sets the billing of this CustomerObject.


        :param billing: The billing of this CustomerObject.  # noqa: E501
        :type: BillingObject
        """

        self._billing = billing

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


        :return: The shipping of this CustomerObject.  # noqa: E501
        :rtype: CustomerObjectShipping
        """
        return self._shipping

    @shipping.setter
    def shipping(self, shipping):
        """Sets the shipping of this CustomerObject.


        :param shipping: The shipping of this CustomerObject.  # noqa: E501
        :type: CustomerObjectShipping
        """

        self._shipping = shipping

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


        :return: The cc_only of this CustomerObject.  # noqa: E501
        :rtype: BillingObject
        """
        return self._cc_only

    @cc_only.setter
    def cc_only(self, cc_only):
        """Sets the cc_only of this CustomerObject.


        :param cc_only: The cc_only of this CustomerObject.  # noqa: E501
        :type: BillingObject
        """

        self._cc_only = cc_only

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


        :return: The merchant of this CustomerObject.  # noqa: E501
        :rtype: CustomerObjectMerchant
        """
        return self._merchant

    @merchant.setter
    def merchant(self, merchant):
        """Sets the merchant of this CustomerObject.


        :param merchant: The merchant of this CustomerObject.  # noqa: E501
        :type: CustomerObjectMerchant
        """

        self._merchant = merchant

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


        :return: The promotion_code of this CustomerObject.  # noqa: E501
        :rtype: str
        """
        return self._promotion_code

    @promotion_code.setter
    def promotion_code(self, promotion_code):
        """Sets the promotion_code of this CustomerObject.


        :param promotion_code: The promotion_code of this CustomerObject.  # noqa: E501
        :type: str
        """

        self._promotion_code = promotion_code

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


        :return: The paypal_emails of this CustomerObject.  # noqa: E501
        :rtype: str
        """
        return self._paypal_emails

    @paypal_emails.setter
    def paypal_emails(self, paypal_emails):
        """Sets the paypal_emails of this CustomerObject.


        :param paypal_emails: The paypal_emails of this CustomerObject.  # noqa: E501
        :type: str
        """

        self._paypal_emails = paypal_emails

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


        :return: The authorization_method of this CustomerObject.  # noqa: E501
        :rtype: str
        """
        return self._authorization_method

    @authorization_method.setter
    def authorization_method(self, authorization_method):
        """Sets the authorization_method of this CustomerObject.


        :param authorization_method: The authorization_method of this CustomerObject.  # noqa: E501
        :type: str
        """

        self._authorization_method = authorization_method

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


        :return: The security_override of this CustomerObject.  # noqa: E501
        :rtype: bool
        """
        return self._security_override

    @security_override.setter
    def security_override(self, security_override):
        """Sets the security_override of this CustomerObject.


        :param security_override: The security_override of this CustomerObject.  # noqa: E501
        :type: bool
        """

        self._security_override = security_override

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


        :return: The team_member of this CustomerObject.  # noqa: E501
        :rtype: bool
        """
        return self._team_member

    @team_member.setter
    def team_member(self, team_member):
        """Sets the team_member of this CustomerObject.


        :param team_member: The team_member of this CustomerObject.  # noqa: E501
        :type: bool
        """

        self._team_member = team_member

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


        :return: The password_locked of this CustomerObject.  # noqa: E501
        :rtype: bool
        """
        return self._password_locked

    @password_locked.setter
    def password_locked(self, password_locked):
        """Sets the password_locked of this CustomerObject.


        :param password_locked: The password_locked of this CustomerObject.  # noqa: E501
        :type: bool
        """

        self._password_locked = password_locked

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


        :return: The address_normalize_override of this CustomerObject.  # noqa: E501
        :rtype: bool
        """
        return self._address_normalize_override

    @address_normalize_override.setter
    def address_normalize_override(self, address_normalize_override):
        """Sets the address_normalize_override of this CustomerObject.


        :param address_normalize_override: The address_normalize_override of this CustomerObject.  # noqa: E501
        :type: bool
        """

        self._address_normalize_override = address_normalize_override

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


        :return: The early_payout_enabled of this CustomerObject.  # noqa: E501
        :rtype: bool
        """
        return self._early_payout_enabled

    @early_payout_enabled.setter
    def early_payout_enabled(self, early_payout_enabled):
        """Sets the early_payout_enabled of this CustomerObject.


        :param early_payout_enabled: The early_payout_enabled of this CustomerObject.  # noqa: E501
        :type: bool
        """

        self._early_payout_enabled = early_payout_enabled

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


        :return: The early_payout_eligible of this CustomerObject.  # noqa: E501
        :rtype: bool
        """
        return self._early_payout_eligible

    @early_payout_eligible.setter
    def early_payout_eligible(self, early_payout_eligible):
        """Sets the early_payout_eligible of this CustomerObject.


        :param early_payout_eligible: The early_payout_eligible of this CustomerObject.  # noqa: E501
        :type: bool
        """

        self._early_payout_eligible = early_payout_eligible

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


        :return: The security of this CustomerObject.  # noqa: E501
        :rtype: CustomerObjectSecurity
        """
        return self._security

    @security.setter
    def security(self, security):
        """Sets the security of this CustomerObject.


        :param security: The security of this CustomerObject.  # noqa: E501
        :type: CustomerObjectSecurity
        """

        self._security = security

    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

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

        return self.__dict__ == other.__dict__

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