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

import { array, lazy, object, optional, Schema } from '../schema.js';
import {
  CountryRestriction,
  countryRestrictionSchema,
} from './countryRestriction.js';
import {
  NetworkRestriction,
  networkRestrictionSchema,
} from './networkRestriction.js';
import {
  PartnerSiteRestriction,
  partnerSiteRestrictionSchema,
} from './partnerSiteRestriction.js';
import {
  ShellSiteRestriction,
  shellSiteRestrictionSchema,
} from './shellSiteRestriction.js';

export interface LocationRestriction {
  countryRestrictions?: CountryRestriction;
  networkRestrictions?: NetworkRestriction[];
  shellSiteRestrictions?: ShellSiteRestriction[];
  partnerSiteRestrictions?: PartnerSiteRestriction[];
}

export const locationRestrictionSchema: Schema<LocationRestriction> = lazy(() =>
  object({
    countryRestrictions: [
      'CountryRestrictions',
      optional(countryRestrictionSchema),
    ],
    networkRestrictions: [
      'NetworkRestrictions',
      optional(array(networkRestrictionSchema)),
    ],
    shellSiteRestrictions: [
      'ShellSiteRestrictions',
      optional(array(shellSiteRestrictionSchema)),
    ],
    partnerSiteRestrictions: [
      'PartnerSiteRestrictions',
      optional(array(partnerSiteRestrictionSchema)),
    ],
  })
);
