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

import {
  array,
  boolean,
  lazy,
  nullable,
  number,
  object,
  optional,
  Schema,
  string,
} from '../schema.js';
import { CartTypeAccount, cartTypeAccountSchema } from './cartTypeAccount.js';
import {
  PurchaseCategories,
  purchaseCategoriesSchema,
} from './purchaseCategories.js';

export interface CardTypeResponseCustomerCardTypesItems {
  /** Card Type Id in Cards Platform. */
  cardTypeId?: number;
  /** Token type identifier. */
  tokenTypeId?: number;
  /** Card Type Name. */
  cardTypeName?: string;
  /** Token Type Name. */
  tokenTypeName?: string;
  /** PAN Length. */
  pANLength?: number;
  /** Default Expiry period. */
  expiryPeriod?: number;
  /** True/False – Whether it is a National Card type or not. */
  isNational?: boolean;
  /** True/False – Whether it is an International Card type or not. */
  isInternational?: boolean;
  /** True/False – Wether it is a CRT Card type or not. */
  isCRT?: boolean;
  /** True/False – Whether it is it a Fleet Card typeor not. */
  isFleet?: boolean;
  /** True/False – Whether it is only allowed in Shell Stations or not. */
  isShellSitesOnly?: boolean;
  /** True/False – Whether this card type is allowed in partner Stations. */
  isPartnerSitesIncluded?: boolean;
  /** True/False – Whether the cards of this card type can have PIN. */
  canHavePIN?: boolean;
  /** True/False - Whether it is a Virtual Card type or not. */
  isVirtual?: boolean;
  /** Whether card type is active or not. */
  isActive?: boolean;
  /** Whether card type is available for download. */
  isCardAvailableForDownload?: boolean | null;
  /** ISO currency code of the country. */
  colCoCurrencyCode?: string;
  /** Currency symbol of the country. */
  colCoCurrencySymbol?: string;
  /** Is Europay, MasterCard, and Visa Contactless enabled or not. */
  eMVContactless?: boolean | null;
  /** Whether the card type is enabled for RFID (Radio Frequency Identification) */
  rFID?: boolean | null;
  /** PIN change supported or not. */
  pINChangeSupported?: boolean | null;
  /** Whether a PIN is mandatory for the cards of this card type. */
  requirePIN?: boolean | null;
  /** Whether offline PIN is enabled or not. */
  offlinePIN?: boolean | null;
  /** Id of the medium type identifier. <br><br> Full list below - <br> 1 - Fuel Card <br> 2 - Fuel Card with EV <br> 3 - EV only  <br> 4 - Fuel Card and Key Fob <br> 5 - Key Fob <br> 6 - Virtual Card <br> 7 - NPII Token <br> 8 – Smartpay Token */
  mediumTypeID?: number;
  /** Name of the medium type identifier. <br><br> Full list below - <br> 1 - Fuel Card <br> 2 - Fuel Card with EV <br> 3 - EV only  <br> 4 - Fuel Card and Key Fob <br> 5 - Key Fob <br> 6 - Virtual Card <br> 7 - NPII Token <br> 8 – Smartpay Token */
  mediumType?: string;
  /** List of accounts. */
  cartTypeAccounts?: CartTypeAccount[];
  purchaseCategories?: PurchaseCategories[] | null;
}

export const cardTypeResponseCustomerCardTypesItemsSchema: Schema<CardTypeResponseCustomerCardTypesItems> = lazy(
  () =>
    object({
      cardTypeId: ['CardTypeId', optional(number())],
      tokenTypeId: ['TokenTypeId', optional(number())],
      cardTypeName: ['CardTypeName', optional(string())],
      tokenTypeName: ['TokenTypeName', optional(string())],
      pANLength: ['PANLength', optional(number())],
      expiryPeriod: ['ExpiryPeriod', optional(number())],
      isNational: ['IsNational', optional(boolean())],
      isInternational: ['IsInternational', optional(boolean())],
      isCRT: ['IsCRT', optional(boolean())],
      isFleet: ['IsFleet', optional(boolean())],
      isShellSitesOnly: ['IsShellSitesOnly', optional(boolean())],
      isPartnerSitesIncluded: ['IsPartnerSitesIncluded', optional(boolean())],
      canHavePIN: ['CanHavePIN', optional(boolean())],
      isVirtual: ['IsVirtual', optional(boolean())],
      isActive: ['IsActive', optional(boolean())],
      isCardAvailableForDownload: [
        'IsCardAvailableForDownload',
        optional(nullable(boolean())),
      ],
      colCoCurrencyCode: ['ColCoCurrencyCode', optional(string())],
      colCoCurrencySymbol: ['ColCoCurrencySymbol', optional(string())],
      eMVContactless: ['EMVContactless', optional(nullable(boolean()))],
      rFID: ['RFID', optional(nullable(boolean()))],
      pINChangeSupported: ['PINChangeSupported', optional(nullable(boolean()))],
      requirePIN: ['RequirePIN', optional(nullable(boolean()))],
      offlinePIN: ['OfflinePIN', optional(nullable(boolean()))],
      mediumTypeID: ['MediumTypeID', optional(number())],
      mediumType: ['MediumType', optional(string())],
      cartTypeAccounts: [
        'CartTypeAccounts',
        optional(array(cartTypeAccountSchema)),
      ],
      purchaseCategories: [
        'PurchaseCategories',
        optional(nullable(array(purchaseCategoriesSchema))),
      ],
    })
);
