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

import { array, lazy, object, optional, Schema, string } from '../schema';
import { Amount, amountSchema } from './amount';
import { Balance1, balance1Schema } from './balance1';
import {
  BankTransactionCode,
  bankTransactionCodeSchema,
} from './bankTransactionCode';
import { CardInstrument, cardInstrumentSchema } from './cardInstrument';
import {
  CreditorAccount41,
  creditorAccount41Schema,
} from './creditorAccount41';
import { DebtorAccount, debtorAccountSchema } from './debtorAccount';
import { MerchantDetails, merchantDetailsSchema } from './merchantDetails';
import {
  ProprietaryBankTransactionCode,
  proprietaryBankTransactionCodeSchema,
} from './proprietaryBankTransactionCode';
import {
  TransactionReference6,
  transactionReference6Schema,
} from './transactionReference6';

export interface Transaction6 {
  accountId: string;
  transactionReference: TransactionReference6;
  transactionId: string;
  amount: Amount;
  creditDebitIndicator: string;
  status: string;
  transactionInformation: string;
  bankTransactionCode: BankTransactionCode;
  proprietaryBankTransactionCode: ProprietaryBankTransactionCode;
  merchantDetails: MerchantDetails;
  creditorAccount: CreditorAccount41;
  debtorAccount: DebtorAccount;
  balance: Balance1;
  statementReference: string[];
  bookingDateTime: string;
  valueDateTime?: string;
  cardInstrument?: CardInstrument;
}

export const transaction6Schema: Schema<Transaction6> = object({
  accountId: ['AccountId', string()],
  transactionReference: [
    'TransactionReference',
    lazy(() => transactionReference6Schema),
  ],
  transactionId: ['TransactionId', string()],
  amount: ['Amount', lazy(() => amountSchema)],
  creditDebitIndicator: ['CreditDebitIndicator', string()],
  status: ['Status', string()],
  transactionInformation: ['TransactionInformation', string()],
  bankTransactionCode: [
    'BankTransactionCode',
    lazy(() => bankTransactionCodeSchema),
  ],
  proprietaryBankTransactionCode: [
    'ProprietaryBankTransactionCode',
    lazy(() => proprietaryBankTransactionCodeSchema),
  ],
  merchantDetails: ['MerchantDetails', lazy(() => merchantDetailsSchema)],
  creditorAccount: ['CreditorAccount', lazy(() => creditorAccount41Schema)],
  debtorAccount: ['DebtorAccount', lazy(() => debtorAccountSchema)],
  balance: ['Balance', lazy(() => balance1Schema)],
  statementReference: ['StatementReference', array(string())],
  bookingDateTime: ['BookingDateTime', string()],
  valueDateTime: ['ValueDateTime', optional(string())],
  cardInstrument: [
    'CardInstrument',
    optional(lazy(() => cardInstrumentSchema)),
  ],
});
