# coding: utf-8

"""
    CyberSource Merged Spec

    All CyberSource API specs merged together. These are available at https://developer.cybersource.com/api/reference/api-reference.html

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


from pprint import pformat
from six import iteritems
import re


class Tmsv2customersEmbeddedDefaultPaymentInstrumentCard(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 = {
        'expiration_month': 'str',
        'expiration_year': 'str',
        'type': 'str',
        'issue_number': 'str',
        'start_month': 'str',
        'start_year': 'str',
        'use_as': 'str',
        'tokenized_information': 'Tmsv2customersEmbeddedDefaultPaymentInstrumentCardTokenizedInformation'
    }

    attribute_map = {
        'expiration_month': 'expirationMonth',
        'expiration_year': 'expirationYear',
        'type': 'type',
        'issue_number': 'issueNumber',
        'start_month': 'startMonth',
        'start_year': 'startYear',
        'use_as': 'useAs',
        'tokenized_information': 'tokenizedInformation'
    }

    def __init__(self, expiration_month=None, expiration_year=None, type=None, issue_number=None, start_month=None, start_year=None, use_as=None, tokenized_information=None):
        """
        Tmsv2customersEmbeddedDefaultPaymentInstrumentCard - a model defined in Swagger
        """

        self._expiration_month = None
        self._expiration_year = None
        self._type = None
        self._issue_number = None
        self._start_month = None
        self._start_year = None
        self._use_as = None
        self._tokenized_information = None

        if expiration_month is not None:
          self.expiration_month = expiration_month
        if expiration_year is not None:
          self.expiration_year = expiration_year
        if type is not None:
          self.type = type
        if issue_number is not None:
          self.issue_number = issue_number
        if start_month is not None:
          self.start_month = start_month
        if start_year is not None:
          self.start_year = start_year
        if use_as is not None:
          self.use_as = use_as
        if tokenized_information is not None:
          self.tokenized_information = tokenized_information

    @property
    def expiration_month(self):
        """
        Gets the expiration_month of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        Two-digit month in which the payment card expires.  Format: `MM`.  Valid values: `01` through `12`. 

        :return: The expiration_month of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        :rtype: str
        """
        return self._expiration_month

    @expiration_month.setter
    def expiration_month(self, expiration_month):
        """
        Sets the expiration_month of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        Two-digit month in which the payment card expires.  Format: `MM`.  Valid values: `01` through `12`. 

        :param expiration_month: The expiration_month of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        :type: str
        """
        if expiration_month is not None and len(expiration_month) > 2:
            raise ValueError("Invalid value for `expiration_month`, length must be less than or equal to `2`")

        self._expiration_month = expiration_month

    @property
    def expiration_year(self):
        """
        Gets the expiration_year of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        Four-digit year in which the credit card expires.  Format: `YYYY`. 

        :return: The expiration_year of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        :rtype: str
        """
        return self._expiration_year

    @expiration_year.setter
    def expiration_year(self, expiration_year):
        """
        Sets the expiration_year of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        Four-digit year in which the credit card expires.  Format: `YYYY`. 

        :param expiration_year: The expiration_year of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        :type: str
        """
        if expiration_year is not None and len(expiration_year) > 4:
            raise ValueError("Invalid value for `expiration_year`, length must be less than or equal to `4`")

        self._expiration_year = expiration_year

    @property
    def type(self):
        """
        Gets the type of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        Value that indicates the card type. Valid v2 : v1 - description values:   * 001 : visa   * 002 : mastercard - Eurocard—European regional brand of Mastercard   * 003 : american express   * 004 : discover   * 005 : diners club   * 006 : carte blanche   * 007 : jcb   * 008 : optima   * 011 : twinpay credit   * 012 : twinpay debit   * 013 : walmart   * 014 : enRoute   * 015 : lowes consumer   * 016 : home depot consumer   * 017 : mbna   * 018 : dicks sportswear   * 019 : casual corner   * 020 : sears   * 021 : jal   * 023 : disney   * 024 : maestro uk domestic   * 025 : sams club consumer   * 026 : sams club business   * 028 : bill me later   * 029 : bebe   * 030 : restoration hardware   * 031 : delta online — use this value only for Ingenico ePayments. For other processors, use 001 for all Visa card types.   * 032 : solo   * 033 : visa electron   * 034 : dankort   * 035 : laser   * 036 : carte bleue — formerly Cartes Bancaires   * 037 : carta si   * 038 : pinless debit   * 039 : encoded account   * 040 : uatp   * 041 : household   * 042 : maestro international   * 043 : ge money uk   * 044 : korean cards   * 045 : style   * 046 : jcrew   * 047 : payease china processing ewallet   * 048 : payease china processing bank transfer   * 049 : meijer private label   * 050 : hipercard — supported only by the Comercio Latino processor.   * 051 : aura — supported only by the Comercio Latino processor.   * 052 : redecard   * 054 : elo — supported only by the Comercio Latino processor.   * 055 : capital one private label   * 056 : synchrony private label   * 057 : costco private label   * 060 : mada   * 062 : china union pay   * 063 : falabella private label 

        :return: The type of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        :rtype: str
        """
        return self._type

    @type.setter
    def type(self, type):
        """
        Sets the type of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        Value that indicates the card type. Valid v2 : v1 - description values:   * 001 : visa   * 002 : mastercard - Eurocard—European regional brand of Mastercard   * 003 : american express   * 004 : discover   * 005 : diners club   * 006 : carte blanche   * 007 : jcb   * 008 : optima   * 011 : twinpay credit   * 012 : twinpay debit   * 013 : walmart   * 014 : enRoute   * 015 : lowes consumer   * 016 : home depot consumer   * 017 : mbna   * 018 : dicks sportswear   * 019 : casual corner   * 020 : sears   * 021 : jal   * 023 : disney   * 024 : maestro uk domestic   * 025 : sams club consumer   * 026 : sams club business   * 028 : bill me later   * 029 : bebe   * 030 : restoration hardware   * 031 : delta online — use this value only for Ingenico ePayments. For other processors, use 001 for all Visa card types.   * 032 : solo   * 033 : visa electron   * 034 : dankort   * 035 : laser   * 036 : carte bleue — formerly Cartes Bancaires   * 037 : carta si   * 038 : pinless debit   * 039 : encoded account   * 040 : uatp   * 041 : household   * 042 : maestro international   * 043 : ge money uk   * 044 : korean cards   * 045 : style   * 046 : jcrew   * 047 : payease china processing ewallet   * 048 : payease china processing bank transfer   * 049 : meijer private label   * 050 : hipercard — supported only by the Comercio Latino processor.   * 051 : aura — supported only by the Comercio Latino processor.   * 052 : redecard   * 054 : elo — supported only by the Comercio Latino processor.   * 055 : capital one private label   * 056 : synchrony private label   * 057 : costco private label   * 060 : mada   * 062 : china union pay   * 063 : falabella private label 

        :param type: The type of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        :type: str
        """

        self._type = type

    @property
    def issue_number(self):
        """
        Gets the issue_number of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        Number of times a Maestro (UK Domestic) card has been issued to the account holder. The card might or might not have an issue number. The number can consist of one or two digits, and the first digit might be a zero. When you include this value in your request, include exactly what is printed on the card. A value of 2 is different than a value of 02. Do not include the field, even with a blank value, if the card is not a Maestro (UK Domestic) card.  **Note** The issue number is not required for Maestro (UK Domestic) transactions. 

        :return: The issue_number of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        :rtype: str
        """
        return self._issue_number

    @issue_number.setter
    def issue_number(self, issue_number):
        """
        Sets the issue_number of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        Number of times a Maestro (UK Domestic) card has been issued to the account holder. The card might or might not have an issue number. The number can consist of one or two digits, and the first digit might be a zero. When you include this value in your request, include exactly what is printed on the card. A value of 2 is different than a value of 02. Do not include the field, even with a blank value, if the card is not a Maestro (UK Domestic) card.  **Note** The issue number is not required for Maestro (UK Domestic) transactions. 

        :param issue_number: The issue_number of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        :type: str
        """
        if issue_number is not None and len(issue_number) > 2:
            raise ValueError("Invalid value for `issue_number`, length must be less than or equal to `2`")

        self._issue_number = issue_number

    @property
    def start_month(self):
        """
        Gets the start_month of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        Month of the start of the Maestro (UK Domestic) card validity period. Do not include the field, even with a blank value, if the card is not a Maestro (UK Domestic) card. `Format: MM`. Valid values: 01 through 12.  **Note** The start date is not required for Maestro (UK Domestic) transactions. 

        :return: The start_month of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        :rtype: str
        """
        return self._start_month

    @start_month.setter
    def start_month(self, start_month):
        """
        Sets the start_month of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        Month of the start of the Maestro (UK Domestic) card validity period. Do not include the field, even with a blank value, if the card is not a Maestro (UK Domestic) card. `Format: MM`. Valid values: 01 through 12.  **Note** The start date is not required for Maestro (UK Domestic) transactions. 

        :param start_month: The start_month of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        :type: str
        """
        if start_month is not None and len(start_month) > 2:
            raise ValueError("Invalid value for `start_month`, length must be less than or equal to `2`")

        self._start_month = start_month

    @property
    def start_year(self):
        """
        Gets the start_year of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        Year of the start of the Maestro (UK Domestic) card validity period. Do not include the field, even with a blank value, if the card is not a Maestro (UK Domestic) card. `Format: YYYY`.  **Note** The start date is not required for Maestro (UK Domestic) transactions. 

        :return: The start_year of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        :rtype: str
        """
        return self._start_year

    @start_year.setter
    def start_year(self, start_year):
        """
        Sets the start_year of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        Year of the start of the Maestro (UK Domestic) card validity period. Do not include the field, even with a blank value, if the card is not a Maestro (UK Domestic) card. `Format: YYYY`.  **Note** The start date is not required for Maestro (UK Domestic) transactions. 

        :param start_year: The start_year of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        :type: str
        """
        if start_year is not None and len(start_year) > 4:
            raise ValueError("Invalid value for `start_year`, length must be less than or equal to `4`")

        self._start_year = start_year

    @property
    def use_as(self):
        """
        Gets the use_as of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        'Payment Instrument was created / updated as part of a pinless debit transaction.' 

        :return: The use_as of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        :rtype: str
        """
        return self._use_as

    @use_as.setter
    def use_as(self, use_as):
        """
        Sets the use_as of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        'Payment Instrument was created / updated as part of a pinless debit transaction.' 

        :param use_as: The use_as of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        :type: str
        """

        self._use_as = use_as

    @property
    def tokenized_information(self):
        """
        Gets the tokenized_information of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.

        :return: The tokenized_information of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        :rtype: Tmsv2customersEmbeddedDefaultPaymentInstrumentCardTokenizedInformation
        """
        return self._tokenized_information

    @tokenized_information.setter
    def tokenized_information(self, tokenized_information):
        """
        Sets the tokenized_information of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.

        :param tokenized_information: The tokenized_information of this Tmsv2customersEmbeddedDefaultPaymentInstrumentCard.
        :type: Tmsv2customersEmbeddedDefaultPaymentInstrumentCardTokenizedInformation
        """

        self._tokenized_information = tokenized_information

    def to_dict(self):
        """
        Returns the model properties as a dict
        """
        result = {}

        for attr, _ in 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 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, Tmsv2customersEmbeddedDefaultPaymentInstrumentCard):
            return False

        return self.__dict__ == other.__dict__

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