/**
 * Shell Card Management APIsLib
 *
 * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
 */

import {
  boolean,
  nullable,
  number,
  object,
  optional,
  Schema,
  string,
} from '../schema';

export interface CardDetailsRequest {
  /**
   * Collecting Company Id  of the selected payer.
   * Optional if ColCoCode is passed else Mandatory.
   * Example:
   * 1-Philippines
   * 5-UK
   */
  colCoCode?: number;
  /**
   * Collecting Company Code (Shell Code) of the selected payer.
   * Mandatory for serviced OUs such as Romania, Latvia, Lithuania, Estonia, Ukraine etc. It is optional for other countries if ColCoID is provided.
   * Example:
   * 86-Philippines
   * 5-UK
   */
  colCoId?: number | null;
  /** ISO Country code of collecting company */
  colCoCountryCode?: string | null;
  /**
   * Customer reference number of the card.
   * Optional
   */
  clientReferenceId?: string | null;
  /** Payer Number of the selected payer. */
  payerNumber?: string | null;
  /** Payer Id (i.e. Customer Id of the Payment of the selected payer. */
  payerId?: number | null;
  /**
   * Account Number of the customer.
   * Optional if AccountId is passed, else mandatory.
   */
  accountNumber?: string | null;
  /**
   * Account ID of the customer.
   * Optional if AccountNumber is passed, else mandatory.
   */
  accountId?: number | null;
  /**
   * PAN of the card.
   * Optional if CardId is passed, else Mandatory.
   */
  pAN?: string | null;
  /**
   * Card Id of the card.
   * Optional if PAN is passed, else Mandatory.
   */
  cardId?: number | null;
  /**
   * Token Type ID for the Card
   * Optional
   */
  tokenTypeID?: number | null;
  /**
   * Token Type name for the Card
   * Optional
   */
  tokenTypeName?: string | null;
  /**
   * Card Creation Date time
   * Optional
   * Format: yyyyMMdd
   */
  creationDate?: string | null;
  /**
   * Effective date for the Card
   * Optional
   * Format: yyyyMMdd
   */
  effectiveDate?: string | null;
  /**
   * When the value is True, API will return bundle Id associated with card in the response, if available.
   * Note: Use ‘Null’ or ‘False’ for optimum performance. A delay in response is expected when set to ‘True’.
   */
  includeBundleDetails?: boolean;
  /** A flag which indicates if the response can contain intermediate statuses */
  includeIntermediateStatus?: boolean;
  /** A flag which indicates if the response can contain scheduled card blocks details */
  includeScheduledCardBlocks?: boolean;
}

export const cardDetailsRequestSchema: Schema<CardDetailsRequest> = object({
  colCoCode: ['ColCoCode', optional(number())],
  colCoId: ['ColCoId', optional(nullable(number()))],
  colCoCountryCode: ['ColCoCountryCode', optional(nullable(string()))],
  clientReferenceId: ['ClientReferenceId', optional(nullable(string()))],
  payerNumber: ['PayerNumber', optional(nullable(string()))],
  payerId: ['PayerId', optional(nullable(number()))],
  accountNumber: ['AccountNumber', optional(nullable(string()))],
  accountId: ['AccountId', optional(nullable(number()))],
  pAN: ['PAN', optional(nullable(string()))],
  cardId: ['CardId', optional(nullable(number()))],
  tokenTypeID: ['TokenTypeID', optional(nullable(number()))],
  tokenTypeName: ['TokenTypeName', optional(nullable(string()))],
  creationDate: ['CreationDate', optional(nullable(string()))],
  effectiveDate: ['EffectiveDate', optional(nullable(string()))],
  includeBundleDetails: ['IncludeBundleDetails', optional(boolean())],
  includeIntermediateStatus: ['IncludeIntermediateStatus', optional(boolean())],
  includeScheduledCardBlocks: [
    'IncludeScheduledCardBlocks',
    optional(boolean()),
  ],
});
