/**
 * Account information PNZ-API-CentreLib
 *
 * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
 */

import { lazy, object, optional, Schema, string } from '../schema';
import { Amount, amountSchema } from './amount';
import {
  BankTransactionCode,
  bankTransactionCodeSchema,
} from './bankTransactionCode';
import { CardInstrument, cardInstrumentSchema } from './cardInstrument';
import {
  ProprietaryBankTransactionCode,
  proprietaryBankTransactionCodeSchema,
} from './proprietaryBankTransactionCode';
import {
  TransactionReference,
  transactionReferenceSchema,
} from './transactionReference';

export interface Transaction14 {
  accountId: string;
  transactionReference: TransactionReference;
  transactionId: string;
  amount: Amount;
  creditDebitIndicator: string;
  status: string;
  bankTransactionCode: BankTransactionCode;
  proprietaryBankTransactionCode: ProprietaryBankTransactionCode;
  bookingDateTime: string;
  valueDateTime: string;
  cardInstrument?: CardInstrument;
}

export const transaction14Schema: Schema<Transaction14> = object({
  accountId: ['AccountId', string()],
  transactionReference: [
    'TransactionReference',
    lazy(() => transactionReferenceSchema),
  ],
  transactionId: ['TransactionId', string()],
  amount: ['Amount', lazy(() => amountSchema)],
  creditDebitIndicator: ['CreditDebitIndicator', string()],
  status: ['Status', string()],
  bankTransactionCode: [
    'BankTransactionCode',
    lazy(() => bankTransactionCodeSchema),
  ],
  proprietaryBankTransactionCode: [
    'ProprietaryBankTransactionCode',
    lazy(() => proprietaryBankTransactionCodeSchema),
  ],
  bookingDateTime: ['BookingDateTime', string()],
  valueDateTime: ['ValueDateTime', string()],
  cardInstrument: [
    'CardInstrument',
    optional(lazy(() => cardInstrumentSchema)),
  ],
});
