// SPDX-FileCopyrightText: 2025 Contributors to the CitrineOS Project
//
// SPDX-License-Identifier: Apache-2.0

/**
 * This file was automatically generated by json-schema-to-typescript.
 * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
 * and run json-schema-to-typescript to regenerate this file.
 */

import {
  MessageFormatEnumType,
  MessagePriorityEnumType,
  MessageStateEnumType,
} from '../enums/index.js';
import type { OcppRequest } from '../../../internal-types.js';

export interface NotifyDisplayMessagesRequest extends OcppRequest {
  /**
   * @minItems 1
   */
  messageInfo?: [MessageInfoType, ...MessageInfoType[]] | null;
  /**
   * The id of the &lt;&lt;getdisplaymessagesrequest,GetDisplayMessagesRequest&gt;&gt; that requested this message.
   *
   */
  requestId: number;
  /**
   * "to be continued" indicator. Indicates whether another part of the report follows in an upcoming NotifyDisplayMessagesRequest message. Default value when omitted is false.
   *
   */
  tbc?: boolean | null;
  customData?: CustomDataType | null;
}
/**
 * Contains message details, for a message to be displayed on a Charging Station.
 *
 */
export interface MessageInfoType {
  display?: ComponentType | null;
  /**
   * Unique id within an exchange context. It is defined within the OCPP context as a positive Integer value (greater or equal to zero).
   *
   */
  id: number;
  priority: MessagePriorityEnumType;
  state?: MessageStateEnumType | null;
  /**
   * From what date-time should this message be shown. If omitted: directly.
   *
   */
  startDateTime?: string | null;
  /**
   * Until what date-time should this message be shown, after this date/time this message SHALL be removed.
   *
   */
  endDateTime?: string | null;
  /**
   * During which transaction shall this message be shown.
   * Message SHALL be removed by the Charging Station after transaction has
   * ended.
   *
   */
  transactionId?: string | null;
  message: MessageContentType;
  /**
   * @minItems 1
   * @maxItems 4
   */
  messageExtra?:
    | [MessageContentType]
    | [MessageContentType, MessageContentType]
    | [MessageContentType, MessageContentType, MessageContentType]
    | [MessageContentType, MessageContentType, MessageContentType, MessageContentType]
    | null;
  customData?: CustomDataType | null;
}
/**
 * A physical or logical component
 *
 */
export interface ComponentType {
  evse?: EVSEType | null;
  /**
   * Name of the component. Name should be taken from the list of standardized component names whenever possible. Case Insensitive. strongly advised to use Camel Case.
   *
   */
  name: string;
  /**
   * Name of instance in case the component exists as multiple instances. Case Insensitive. strongly advised to use Camel Case.
   *
   */
  instance?: string | null;
  customData?: CustomDataType | null;
}
/**
 * Electric Vehicle Supply Equipment
 *
 */
export interface EVSEType {
  /**
   * EVSE Identifier. This contains a number (&gt; 0) designating an EVSE of the Charging Station.
   *
   */
  id: number;
  /**
   * An id to designate a specific connector (on an EVSE) by connector index number.
   *
   */
  connectorId?: number | null;
  customData?: CustomDataType | null;
}
/**
 * This class does not get 'AdditionalProperties = false' in the schema generation, so it can be extended with arbitrary JSON properties to allow adding custom data.
 */
export interface CustomDataType {
  vendorId: string;
  [k: string]: unknown;
}
/**
 * Contains message details, for a message to be displayed on a Charging Station.
 *
 *
 */
export interface MessageContentType {
  format: MessageFormatEnumType;
  /**
   * Message language identifier. Contains a language code as defined in &lt;&lt;ref-RFC5646,[RFC5646]&gt;&gt;.
   *
   */
  language?: string | null;
  /**
   * *(2.1)* Required. Message contents. +
   * Maximum length supported by Charging Station is given in OCPPCommCtrlr.FieldLength["MessageContentType.content"].
   *     Maximum length defaults to 1024.
   *
   *
   */
  content: string;
  customData?: CustomDataType | null;
}
