/*
 * The version of the OpenAPI document: v3
 * 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 { Amount } from './amount';
import { CounterpartyV3 } from './counterpartyV3';

export class Transfer {
    'amount': Amount;
    /**
    * Unique identifier of the source [balance account](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/post/balanceAccounts__resParam_id).
    */
    'balanceAccountId'?: string;
    /**
    * The type of transfer.  Possible values:   - **bank**: Transfer to a [transfer instrument](https://docs.adyen.com/api-explorer/#/legalentity/latest/post/transferInstruments__resParam_id) or a bank account.  - **internal**: Transfer to another [balance account](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/post/balanceAccounts__resParam_id) within your platform.
    */
    'category': Transfer.CategoryEnum;
    'counterparty': CounterpartyV3;
    /**
    * A human-readable description for the transfer. You can use alphanumeric characters and hyphens. We recommend sending a maximum of 140 characters, otherwise the description may be truncated.
    */
    'description'?: string;
    /**
    * The direction of the transfer.  Possible values: **incoming**, **outgoing**.
    */
    'direction'?: Transfer.DirectionEnum;
    /**
    * The ID of the resource.
    */
    'id'?: string;
    /**
    * Unique identifier of the source [payment instrument](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/post/paymentInstruments__resParam_id).
    */
    'paymentInstrumentId'?: string;
    /**
    * The priority for the bank transfer. This sets the speed at which the transfer is sent and the fees that you have to pay. Required for transfers with `category` **bank**.  Possible values:  * **regular**: For normal, low-value transactions.  * **fast**: Faster way to transfer funds but has higher fees. Recommended for high-priority, low-value transactions.  * **wire**: Fastest way to transfer funds but has the highest fees. Recommended for high-priority, high-value transactions.  
    */
    'priority'?: Transfer.PriorityEnum;
    /**
    * Additional information about the status of the transfer.
    */
    'reason'?: Transfer.ReasonEnum;
    /**
    * A reference for the transfer, only used internally within your platform. If you don\'t provide this in the request, Adyen generates a unique reference. Maximum length: 80 characters.
    */
    'reference'?: string;
    /**
    *  A reference that is sent to the recipient. This reference is also sent in all notification webhooks related to the transfer, so you can use it to track statuses for both the source and recipient of funds.   Supported characters: **a-z**, **A-Z**, **0-9**. The maximum length depends on the `category`.  - **internal**: 80 characters  - **bank**: 35 characters when transferring to an IBAN, 15 characters for others.
    */
    'referenceForBeneficiary'?: string;
    /**
    * The result of the transfer.   Possible values: **authorised**, **refused**, **error**.
    */
    'status': Transfer.StatusEnum;

    static discriminator: string | undefined = undefined;

    static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [
        {
            "name": "amount",
            "baseName": "amount",
            "type": "Amount"
        },
        {
            "name": "balanceAccountId",
            "baseName": "balanceAccountId",
            "type": "string"
        },
        {
            "name": "category",
            "baseName": "category",
            "type": "Transfer.CategoryEnum"
        },
        {
            "name": "counterparty",
            "baseName": "counterparty",
            "type": "CounterpartyV3"
        },
        {
            "name": "description",
            "baseName": "description",
            "type": "string"
        },
        {
            "name": "direction",
            "baseName": "direction",
            "type": "Transfer.DirectionEnum"
        },
        {
            "name": "id",
            "baseName": "id",
            "type": "string"
        },
        {
            "name": "paymentInstrumentId",
            "baseName": "paymentInstrumentId",
            "type": "string"
        },
        {
            "name": "priority",
            "baseName": "priority",
            "type": "Transfer.PriorityEnum"
        },
        {
            "name": "reason",
            "baseName": "reason",
            "type": "Transfer.ReasonEnum"
        },
        {
            "name": "reference",
            "baseName": "reference",
            "type": "string"
        },
        {
            "name": "referenceForBeneficiary",
            "baseName": "referenceForBeneficiary",
            "type": "string"
        },
        {
            "name": "status",
            "baseName": "status",
            "type": "Transfer.StatusEnum"
        }    ];

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

export namespace Transfer {
    export enum CategoryEnum {
        Bank = <any> 'bank',
        Internal = <any> 'internal'
    }
    export enum DirectionEnum {
        Incoming = <any> 'incoming',
        Outgoing = <any> 'outgoing'
    }
    export enum PriorityEnum {
        Fast = <any> 'fast',
        Instant = <any> 'instant',
        Regular = <any> 'regular',
        Wire = <any> 'wire'
    }
    export enum ReasonEnum {
        Approved = <any> 'approved',
        Error = <any> 'error',
        NotEnoughBalance = <any> 'notEnoughBalance',
        Unknown = <any> 'unknown'
    }
    export enum StatusEnum {
        AtmWithdrawal = <any> 'atmWithdrawal',
        AtmWithdrawalReversalPending = <any> 'atmWithdrawalReversalPending',
        AtmWithdrawalReversed = <any> 'atmWithdrawalReversed',
        Authorised = <any> 'authorised',
        BankTransfer = <any> 'bankTransfer',
        BankTransferPending = <any> 'bankTransferPending',
        Booked = <any> 'booked',
        BookingPending = <any> 'bookingPending',
        Cancelled = <any> 'cancelled',
        CapturePending = <any> 'capturePending',
        CaptureReversalPending = <any> 'captureReversalPending',
        CaptureReversed = <any> 'captureReversed',
        Captured = <any> 'captured',
        Chargeback = <any> 'chargeback',
        ChargebackPending = <any> 'chargebackPending',
        ChargebackReversalPending = <any> 'chargebackReversalPending',
        ChargebackReversed = <any> 'chargebackReversed',
        DepositCorrection = <any> 'depositCorrection',
        DepositCorrectionPending = <any> 'depositCorrectionPending',
        Dispute = <any> 'dispute',
        DisputeClosed = <any> 'disputeClosed',
        DisputeExpired = <any> 'disputeExpired',
        DisputeNeedsReview = <any> 'disputeNeedsReview',
        Error = <any> 'error',
        Expired = <any> 'expired',
        Failed = <any> 'failed',
        Fee = <any> 'fee',
        FeePending = <any> 'feePending',
        InternalTransfer = <any> 'internalTransfer',
        InternalTransferPending = <any> 'internalTransferPending',
        InvoiceDeduction = <any> 'invoiceDeduction',
        InvoiceDeductionPending = <any> 'invoiceDeductionPending',
        ManualCorrectionPending = <any> 'manualCorrectionPending',
        ManuallyCorrected = <any> 'manuallyCorrected',
        MatchedStatement = <any> 'matchedStatement',
        MatchedStatementPending = <any> 'matchedStatementPending',
        MerchantPayin = <any> 'merchantPayin',
        MerchantPayinPending = <any> 'merchantPayinPending',
        MerchantPayinReversed = <any> 'merchantPayinReversed',
        MerchantPayinReversedPending = <any> 'merchantPayinReversedPending',
        MiscCost = <any> 'miscCost',
        MiscCostPending = <any> 'miscCostPending',
        PaymentCost = <any> 'paymentCost',
        PaymentCostPending = <any> 'paymentCostPending',
        Received = <any> 'received',
        RefundPending = <any> 'refundPending',
        RefundReversalPending = <any> 'refundReversalPending',
        RefundReversed = <any> 'refundReversed',
        Refunded = <any> 'refunded',
        Refused = <any> 'refused',
        ReserveAdjustment = <any> 'reserveAdjustment',
        ReserveAdjustmentPending = <any> 'reserveAdjustmentPending',
        SecondChargeback = <any> 'secondChargeback',
        SecondChargebackPending = <any> 'secondChargebackPending',
        Undefined = <any> 'undefined'
    }
}
