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

import {
  array,
  lazy,
  number,
  object,
  optional,
  Schema,
  string,
} from '../schema';
import { Accessibility, accessibilitySchema } from './accessibility';
import { Address, addressSchema } from './address';
import { Coordinates, coordinatesSchema } from './coordinates';
import { EvseVO, evseVOSchema } from './evseVO';
import {
  OpeningHoursObject,
  openingHoursObjectSchema,
} from './openingHoursObject';

export interface LocationResponeObject {
  /** Unique Internal identifier used to refer to this Location by Shell Recharge */
  uid?: number;
  /** Identifier as given by the Shell Recharge Operator, unique for that Operator */
  externalId?: string;
  /** Coordinates of the Shell Recharge Site Location */
  coordinates?: Coordinates;
  /** Operator of this Shell Recharge Location */
  operatorName?: string;
  /** Address of the Shell Recharge Location */
  address?: Address;
  /** Accessibility of the Location */
  accessibility?: Accessibility;
  evses?: EvseVO[];
  /** Optional Opening Hours of the Location. Please note that it is not available for all sites. */
  openingHours?: OpeningHoursObject[];
  /** ISO8601-compliant UTC datetime of the last update of the location */
  updated?: string;
  /** optional Operator-wide arbitrary text (eg promotional, warning) */
  operatorComment?: string;
  /** the type of the location. Could be "UNKNOWN". */
  locationType?: string;
}

export const locationResponeObjectSchema: Schema<LocationResponeObject> = object(
  {
    uid: ['uid', optional(number())],
    externalId: ['externalId', optional(string())],
    coordinates: ['coordinates', optional(lazy(() => coordinatesSchema))],
    operatorName: ['operatorName', optional(string())],
    address: ['address', optional(lazy(() => addressSchema))],
    accessibility: ['accessibility', optional(lazy(() => accessibilitySchema))],
    evses: ['evses', optional(array(lazy(() => evseVOSchema)))],
    openingHours: [
      'openingHours',
      optional(array(lazy(() => openingHoursObjectSchema))),
    ],
    updated: ['updated', optional(string())],
    operatorComment: ['operatorComment', optional(string())],
    locationType: ['locationType', optional(string())],
  }
);
