/*
 * 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 PaymentInstrumentUpdateRequest {
    /**
    * The unique identifier of the balance account associated with this payment instrument. >You can only change the balance account ID if the payment instrument has **inactive** status.
    */
    'balanceAccountId'?: string;
    'card'?: CardInfo;
    /**
    * 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'?: PaymentInstrumentUpdateRequest.StatusEnum;
    /**
    * Comment for the status of the payment instrument.  Required if `statusReason` is **other**.
    */
    'statusComment'?: string;
    /**
    * 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'?: PaymentInstrumentUpdateRequest.StatusReasonEnum;

    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": "status",
            "baseName": "status",
            "type": "PaymentInstrumentUpdateRequest.StatusEnum"
        },
        {
            "name": "statusComment",
            "baseName": "statusComment",
            "type": "string"
        },
        {
            "name": "statusReason",
            "baseName": "statusReason",
            "type": "PaymentInstrumentUpdateRequest.StatusReasonEnum"
        }    ];

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

export namespace PaymentInstrumentUpdateRequest {
    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'
    }
}
