import { EFrom, IDesenfilaInfo, IInfo, IMobyoInfo } from '../../general';
import { ENatipaySaleChannel } from '../../natipay/orders/enums';
import { EFeePayer, EMpStatus, EMpStatusDetail, EOperationType, EPaymentMethodId, EReleaseStatus, ETransactionProvider, ETransactionStatus } from '../enums';
import { ETransactionOperation } from '../enums/transaction-operation.enum';
import { ITransactionBalance } from './i-balance';
import { IFeeDetail } from './i-fee-detail';
import { ITransactionPaymentMethod } from './i-payment-method';
import { ITransactionTotal } from './i-total';
export interface ITransaction {
    balance: ITransactionBalance | null;
    card: {};
    createdAt: Date;
    dateApproved: Date | null;
    dateCreated: Date;
    dateLastUpdated: Date;
    dateOfExpiration: Date | null;
    description: string;
    desenfilaInfo: IDesenfilaInfo | null;
    externalOrderReference: string;
    feeDetails: IFeeDetail[];
    /**
     * @description Define quem paga a taxa (fee) da transação.
     *
     * - MERCHANT: A taxa é paga pelo lojista.
     * - PLATFORM: A taxa é paga pela plataforma.
     */
    feePayer: EFeePayer;
    from: EFrom;
    id: string;
    installments: number;
    liveMode: boolean;
    mobyoInfo: IMobyoInfo | null;
    moneyReleaseDate: Date | null;
    moneyReleaseStatus: EReleaseStatus;
    natiInfo: IInfo | null;
    operationType: EOperationType;
    payerInfo: IInfo | null;
    paymentMethod: ITransactionPaymentMethod | null;
    paymentMethodId: EPaymentMethodId;
    posId: string;
    provider: ETransactionProvider;
    referenceId: 'goLive' | 'engine_mobyo_fee' | 'withdraw' | string;
    resumeVersion: string;
    saleChannel: ENatipaySaleChannel;
    stamped: string | null;
    status: EMpStatus;
    statusDetail: EMpStatusDetail;
    total: ITransactionTotal | null;
    transactionAmount: number;
    transactionAmountRefunded: number;
    transactionOperation: ETransactionOperation;
    transactionStatus: ETransactionStatus;
    /**
     * @description IDs das transações originais usadas para rastreamento de fees (tarifas).
     *
     *  - Quando o `feePayer` for MERCHANT: utilize `id[0]` para localizar
     *   a transação original associada à tarifa do lojista.
     *
     * - Quando o `feePayer` for PLATFORM: utilize `id[1]` para localizar
     *   a transação original associada à tarifa da plataforma.
     *
     * @important Esses IDs são cruciais para auditoria e reconciliação,
     *            mantendo o vínculo com as transações de origem.
     */
    transactionTraceIds: string[];
    updatedAt: Date;
}
