namespace ZA.CoreService.ESBCertificateManager.Models;
///
/// Verbindungskonfiguration für eine Progress Sonic ESB Management Instanz.
///
public sealed class SonicConnection
{
///
/// Eindeutiger Bezeichner; wird in referenziert.
///
public required string Name { get; init; }
/// Sonic-Domain-Name, z.B. "proalpha-test".
public required string DomainName { get; init; }
///
/// Sonic-Broker-/Management-URL im Sonic-Format, z.B. "tcp://dekun-painwbdet:13070".
/// Der Hostname wird daraus extrahiert (für HTTP-Modus: Basis-URL, für WinRM-Modus: Zielrechner).
///
public required string ConnectionUrl { get; init; }
/// Benutzername für die Management-Konsole.
public required string Username { get; init; }
/// Passwort für die Management-Konsole.
public required string Password { get; init; }
///
/// Management-Modus: HttpApi (REST) oder WinRm (PowerShell Remoting).
/// Standard: WinRm – da Sonic 10.x kein HTTP REST API bereitstellt.
///
public SonicManagementMode ManagementMode { get; init; } = SonicManagementMode.WinRm;
// ---------------------------------------------------------------
// HTTP REST API (ManagementMode = HttpApi)
// ---------------------------------------------------------------
/// HTTP-Port der Sonic Management Console REST-API (Standard: 8080).
public int ManagementHttpPort { get; init; } = 8080;
/// Präfix für alle REST-API-Pfade (Standard: "/api/v1").
public string ApiBasePath { get; init; } = "/api/v1";
/// Konfigurierter Pfad zum Auflisten aller Container. Leer = automatische Erkennung.
public string ContainerListPath { get; init; } = string.Empty;
/// Konfigurierter Pfad zum Neustarten. Platzhalter: {domain}, {container}.
public string ContainerRestartPath { get; init; } = string.Empty;
/// Konfigurierter Pfad zum Stoppen. Platzhalter: {domain}, {container}.
public string ContainerStopPath { get; init; } = string.Empty;
/// Konfigurierter Pfad zum Starten. Platzhalter: {domain}, {container}.
public string ContainerStartPath { get; init; } = string.Empty;
// ---------------------------------------------------------------
// WinRM / PowerShell Remoting (ManagementMode = WinRm)
// ---------------------------------------------------------------
///
/// WinRM-Port auf dem Zielrechner (Standard: 5985 = HTTP, 5986 = HTTPS).
///
public int WinRmPort { get; init; } = 5985;
///
/// PowerShell-Scriptblock zum Neustarten eines Containers.
/// Platzhalter: {container} = Container-Name (nicht enkodiert), {domain} = Domain-Name.
/// Beispiel für Windows-Service: "Restart-Service -Name 'CT-ZADBService' -Force"
/// Beispiel für Sonic-Skript: "& 'C:\\Sonic\\bin\\stopContainer.bat' '{container}'; Start-Sleep 5; & 'C:\\Sonic\\bin\\startContainer.bat' '{container}'"
///
public string WinRmRestartScript { get; init; } = string.Empty;
///
/// PowerShell-Scriptblock zum Auflisten aller Container der Domain.
/// Ausgabe: eine Zeile pro Container-Name.
/// Beispiel: "Get-Service -DisplayName 'Sonic*' | Select-Object -ExpandProperty Name"
///
public string WinRmContainerListScript { get; init; } = string.Empty;
///
/// PowerShell-Scriptblock für XApi-Import.
/// Platzhalter: {container}, {xapiPath}.
///
public string WinRmXapiImportScript { get; init; } = string.Empty;
// ---------------------------------------------------------------
// Gemeinsame Einstellungen
// ---------------------------------------------------------------
/// Timeout in Sekunden für einzelne API-/Script-Aufrufe (Standard: 60).
public int TimeoutSeconds { get; init; } = 60;
/// Wartezeit in Sekunden nach einem Container-Neustart (Standard: 15).
public int PostRestartDelaySeconds { get; init; } = 15;
}
public enum SonicManagementMode
{
/// HTTP REST API (wenn vom Sonic-Server bereitgestellt).
HttpApi,
///
/// PowerShell Remoting (WinRM) – Standard für Sonic 10.x auf Windows.
/// Führt konfigurierte Scriptblöcke via Invoke-Command auf dem Sonic-Server aus.
///
WinRm
}