/**
 * 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 { ConnectorVO, connectorVOSchema } from './connectorVO';
import {
  EvseVOAuthorizationMethodsEnum,
  evseVOAuthorizationMethodsEnumSchema,
} from './evseVOAuthorizationMethodsEnum';
import { EvseVOStatusEnum, evseVOStatusEnumSchema } from './evseVOStatusEnum';

/** Each Location will contain one or more EVSEs (Electric Vehicle Supply Equipment). Each EVSE is capable of charging one car at a time. */
export interface EvseVO {
  /** Internal identifier used to refer to single individual  EVSE unit. */
  uid?: number;
  /** Identifier of the Evse as given by the Operator, unique for that Operator */
  externalId?: string;
  /** Standard EVSEId identifier (ISO-IEC-15118) */
  evseId?: string;
  /** The current status of the EVSE units availability */
  status?: EvseVOStatusEnum;
  /** List of all connectors available on this EVSE unit. */
  connectors?: ConnectorVO[];
  /** Methods that can be used to Authorize sessions on this EVSE */
  authorizationMethods?: EvseVOAuthorizationMethodsEnum;
  /** ISO8601-compliant UTC datetime of the last update of the EVSE */
  updated?: string;
  /** optional  ISO8601-compliant UTC deletion timestamp of the Evse */
  deleted?: string;
  /** An optional number/string printed on the outside of the EVSE for visual identification */
  physicalReference?: string;
}

export const evseVOSchema: Schema<EvseVO> = object({
  uid: ['uid', optional(number())],
  externalId: ['externalId', optional(string())],
  evseId: ['evseId', optional(string())],
  status: ['status', optional(evseVOStatusEnumSchema)],
  connectors: ['connectors', optional(array(lazy(() => connectorVOSchema)))],
  authorizationMethods: [
    'authorizationMethods',
    optional(evseVOAuthorizationMethodsEnumSchema),
  ],
  updated: ['updated', optional(string())],
  deleted: ['deleted', optional(string())],
  physicalReference: ['physicalReference', optional(string())],
});
