feat: add addChargingStations command to UI API
[e-mobility-charging-stations-simulator.git] / src / charging-station / ui-server / UIServerFactory.ts
index b0020b2e872e11dc6a59b0a5491f265203453a45..fe2b36d22a3f39375800447beb895448e1cabd77 100644 (file)
@@ -1,33 +1,52 @@
-import chalk from 'chalk';
+import chalk from 'chalk'
 
-import { ServerOptions } from '../../types/ConfigurationData';
-import { ApplicationProtocol } from '../../types/UIProtocol';
-import Configuration from '../../utils/Configuration';
-import { AbstractUIServer } from './AbstractUIServer';
-import { UIServiceUtils } from './ui-services/UIServiceUtils';
-import UIWebSocketServer from './UIWebSocketServer';
+import type { AbstractUIServer } from './AbstractUIServer.js'
+import { UIHttpServer } from './UIHttpServer.js'
+import { UIServerUtils } from './UIServerUtils.js'
+import { UIWebSocketServer } from './UIWebSocketServer.js'
+import {
+  ApplicationProtocol,
+  ApplicationProtocolVersion,
+  type UIServerConfiguration
+} from '../../types/index.js'
 
-export default class UIServerFactory {
-  private constructor() {
+// eslint-disable-next-line @typescript-eslint/no-extraneous-class
+export class UIServerFactory {
+  private constructor () {
     // This is intentional
   }
 
-  public static getUIServerImplementation(
-    applicationProtocol: ApplicationProtocol,
-    options?: ServerOptions
-  ): AbstractUIServer | null {
-    if (!UIServiceUtils.isLoopback(options?.host)) {
+  public static getUIServerImplementation (
+    uiServerConfiguration: UIServerConfiguration
+  ): AbstractUIServer | undefined {
+    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+    if (!UIServerUtils.isLoopback(uiServerConfiguration.options!.host!)) {
       console.warn(
-        chalk.magenta(
+        chalk.yellow(
           'Loopback address not detected in UI server configuration. This is not recommended.'
         )
-      );
+      )
     }
-    switch (applicationProtocol) {
+    uiServerConfiguration = {
+      version: ApplicationProtocolVersion.VERSION_11,
+      ...uiServerConfiguration
+    }
+    if (
+      uiServerConfiguration.type === ApplicationProtocol.WS &&
+      uiServerConfiguration.version !== ApplicationProtocolVersion.VERSION_11
+    ) {
+      console.warn(
+        chalk.yellow(
+          `Only version ${ApplicationProtocolVersion.VERSION_11} is supported for WebSocket UI server. Falling back to version ${ApplicationProtocolVersion.VERSION_11}.`
+        )
+      )
+      uiServerConfiguration.version = ApplicationProtocolVersion.VERSION_11
+    }
+    switch (uiServerConfiguration.type) {
       case ApplicationProtocol.WS:
-        return new UIWebSocketServer(options ?? Configuration.getUIServer().options);
-      default:
-        return null;
+        return new UIWebSocketServer(uiServerConfiguration)
+      case ApplicationProtocol.HTTP:
+        return new UIHttpServer(uiServerConfiguration)
     }
   }
 }