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

import {
  boolean,
  lazy,
  nullable,
  object,
  optional,
  Schema,
  string,
} from '../schema.js';
import {
  CardDayTimeRestrictions,
  cardDayTimeRestrictionsSchema,
} from './cardDayTimeRestrictions.js';
import {
  LocationRestriction,
  locationRestrictionSchema,
} from './locationRestriction.js';
import {
  ProductRestrictionCard,
  productRestrictionCardSchema,
} from './productRestrictionCard.js';
import {
  UsageRestrictionsCard,
  usageRestrictionsCardSchema,
} from './usageRestrictionsCard.js';

export interface BundleRestrictionUpdate {
  /**
   * True/False
   * A value indicates if the day/time restriction is to be reset for card bundle.
   * Optional
   * Default value is False.
   */
  resetDayTimeRestriction?: boolean | null;
  /**
   * True/False
   * A value indicates if the location restriction is to be reset for card bundle.
   * Optional
   * Default value is False.
   */
  resetLocationRestriction?: boolean | null;
  /**
   * True/False
   * A value indicates if the product restriction is to be reset for card bundle.
   * Optional
   * Default value is False.
   */
  resetProductRestriction?: boolean | null;
  usageRestrictions?: UsageRestrictionsCard;
  /**
   * Identifier of the day/time restriction profile to be updated for the bundle in Gateway.
   * Optional
   */
  dayTimeRestrictionProfileId?: string | null;
  dayTimeRestrictions?: CardDayTimeRestrictions;
  productRestrictions?: ProductRestrictionCard;
  /**
   * Identifier of the location restriction profile to be updated for the bundle in Gateway.
   * Optional
   */
  locationRestrictionProfileId?: string;
  locationRestrictions?: LocationRestriction;
}

export const bundleRestrictionUpdateSchema: Schema<BundleRestrictionUpdate> = lazy(
  () =>
    object({
      resetDayTimeRestriction: [
        'ResetDayTimeRestriction',
        optional(nullable(boolean())),
      ],
      resetLocationRestriction: [
        'ResetLocationRestriction',
        optional(nullable(boolean())),
      ],
      resetProductRestriction: [
        'ResetProductRestriction',
        optional(nullable(boolean())),
      ],
      usageRestrictions: [
        'UsageRestrictions',
        optional(usageRestrictionsCardSchema),
      ],
      dayTimeRestrictionProfileId: [
        'DayTimeRestrictionProfileId',
        optional(nullable(string())),
      ],
      dayTimeRestrictions: [
        'DayTimeRestrictions',
        optional(cardDayTimeRestrictionsSchema),
      ],
      productRestrictions: [
        'ProductRestrictions',
        optional(productRestrictionCardSchema),
      ],
      locationRestrictionProfileId: [
        'LocationRestrictionProfileId',
        optional(string()),
      ],
      locationRestrictions: [
        'LocationRestrictions',
        optional(locationRestrictionSchema),
      ],
    })
);
