/*
 * The version of the OpenAPI document: v2
 * Contact: developer-experience@adyen.com
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit this class manually.
 */

import { CardInfo } from './cardInfo';

export class PaymentInstrumentInfo {
    /**
    * The unique identifier of the [balance account](https://docs.adyen.com/api-explorer/#/balanceplatform/v1/post/balanceAccounts__resParam_id) associated with the payment instrument.
    */
    'balanceAccountId': string;
    'card'?: CardInfo;
    /**
    * Your description for the payment instrument, maximum 300 characters.
    */
    'description'?: string;
    /**
    * The two-character [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) country code where the payment instrument is issued. For example, **NL** or **US**.
    */
    'issuingCountryCode': string;
    /**
    * The unique identifier of the [payment instrument group](https://docs.adyen.com/api-explorer/#/balanceplatform/v1/post/paymentInstrumentGroups__resParam_id) to which the payment instrument belongs.
    */
    'paymentInstrumentGroupId'?: string;
    /**
    * Your reference for the payment instrument, maximum 150 characters.
    */
    'reference'?: string;
    /**
    * The status of the payment instrument. If a status is not specified when creating a payment instrument, it is set to **active** by default. However, there can be exceptions for cards based on the `card.formFactor` and the `issuingCountryCode`. For example, when issuing physical cards in the US, the default status is **inactive**.  Possible values:    * **active**:  The payment instrument is active and can be used to make payments.    * **inactive**: The payment instrument is inactive and cannot be used to make payments.    * **suspended**: The payment instrument is suspended, either because it was stolen or lost.    * **closed**: The payment instrument is permanently closed. This action cannot be undone.   
    */
    'status'?: PaymentInstrumentInfo.StatusEnum;
    /**
    * The reason for updating the status of the payment instrument.  Possible values: **lost**, **stolen**, **damaged**, **suspectedFraud**, **expired**, **endOfLife**, **accountClosure**, **other**. If the reason is **other**, you must also send the `statusComment` parameter describing the status change.
    */
    'statusReason'?: PaymentInstrumentInfo.StatusReasonEnum;
    /**
    * Type of payment instrument.  Possible value: **card**, **bankAccount**. 
    */
    'type': PaymentInstrumentInfo.TypeEnum;

    static discriminator: string | undefined = undefined;

    static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [
        {
            "name": "balanceAccountId",
            "baseName": "balanceAccountId",
            "type": "string"
        },
        {
            "name": "card",
            "baseName": "card",
            "type": "CardInfo"
        },
        {
            "name": "description",
            "baseName": "description",
            "type": "string"
        },
        {
            "name": "issuingCountryCode",
            "baseName": "issuingCountryCode",
            "type": "string"
        },
        {
            "name": "paymentInstrumentGroupId",
            "baseName": "paymentInstrumentGroupId",
            "type": "string"
        },
        {
            "name": "reference",
            "baseName": "reference",
            "type": "string"
        },
        {
            "name": "status",
            "baseName": "status",
            "type": "PaymentInstrumentInfo.StatusEnum"
        },
        {
            "name": "statusReason",
            "baseName": "statusReason",
            "type": "PaymentInstrumentInfo.StatusReasonEnum"
        },
        {
            "name": "type",
            "baseName": "type",
            "type": "PaymentInstrumentInfo.TypeEnum"
        }    ];

    static getAttributeTypeMap() {
        return PaymentInstrumentInfo.attributeTypeMap;
    }
}

export namespace PaymentInstrumentInfo {
    export enum StatusEnum {
        Active = <any> 'active',
        Closed = <any> 'closed',
        Inactive = <any> 'inactive',
        Suspended = <any> 'suspended'
    }
    export enum StatusReasonEnum {
        AccountClosure = <any> 'accountClosure',
        Damaged = <any> 'damaged',
        EndOfLife = <any> 'endOfLife',
        Expired = <any> 'expired',
        Lost = <any> 'lost',
        Other = <any> 'other',
        Stolen = <any> 'stolen',
        SuspectedFraud = <any> 'suspectedFraud'
    }
    export enum TypeEnum {
        BankAccount = <any> 'bankAccount',
        Card = <any> 'card'
    }
}
