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

import {
  boolean,
  lazy,
  nullable,
  number,
  object,
  optional,
  Schema,
  string,
} from '../schema.js';
import {
  UsageRestrictionsCard,
  usageRestrictionsCardSchema,
} from './usageRestrictionsCard.js';

export interface AccountRestrictionRequest {
  /**
   * Collecting Company Id of the selected payer.
   * Optional if ColCoCode is passed else Mandatory.
   * Example:
   * 1 for Philippines
   * 5 for UK
   */
  colCoId?: number | null;
  /**
   * 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 for Philippines
   * 5 for UK
   */
  colCoCode?: number | null;
  /**
   * Payer Id of the selected payer.
   * Optional if PayerNumber is passed else Mandatory
   * Example: 123456
   */
  payerId?: number | null;
  /**
   * Payer Number of the selected payer.
   * Optional if PayerId is passed else Mandatory
   * Example: GB000000123
   */
  payerNumber?: string | null;
  /**
   * Account ID of the customer on which the restrictions will be applied.
   * Optional if AccountNumber is passed, else Mandatory.
   * Example: 123456
   */
  accountId?: number | null;
  /**
   * Account Number of the customer on which the restrictions will be applied.
   * Optional if AccountId is passed, else Mandatory.
   * Example: GB000000123
   */
  accountNumber?: string | null;
  /**
   * True/False.
   * If true, the usage restrictions applied on the account will be removed.
   * Optional
   * Default: False
   */
  resetUsageRestrictions?: boolean | null;
  usageRestrictions?: UsageRestrictionsCard;
}

export const accountRestrictionRequestSchema: Schema<AccountRestrictionRequest> = lazy(
  () =>
    object({
      colCoId: ['ColCoId', optional(nullable(number()))],
      colCoCode: ['ColCoCode', optional(nullable(number()))],
      payerId: ['PayerId', optional(nullable(number()))],
      payerNumber: ['PayerNumber', optional(nullable(string()))],
      accountId: ['AccountId', optional(nullable(number()))],
      accountNumber: ['AccountNumber', optional(nullable(string()))],
      resetUsageRestrictions: [
        'ResetUsageRestrictions',
        optional(nullable(boolean())),
      ],
      usageRestrictions: [
        'UsageRestrictions',
        optional(usageRestrictionsCardSchema),
      ],
    })
);
