namespace ClawdDotNet.Desktop;
///
/// Die Argumente, die vor allem anderen gelesen werden müssen.
///
/// Eigene Klasse, weil sie zwei Aufrufer hat, die sich nicht kennen dürfen:
/// entscheidet damit, ob überhaupt ein Fenster entsteht, und
/// übernimmt die vorgewählte Instanz in den Startvorgang. Lägen sie in
/// App, müsste Program die Oberfläche anfassen, um zu erfahren, dass keine
/// gebraucht wird.
///
internal static class CommandLine
{
public const string InstanceArgument = "--instance";
/// Läuft ohne Fenster: nur Aufbau, Socket und Warten (#528, Stufe 2).
public const string HeadlessArgument = "--headless";
///
/// Gestartet und beaufsichtigt vom Instanzmanager (#528, Stufe 5).
///
/// Dann gehört der Instanzwechsel dorthin und nicht in dieses Fenster: Der
/// Manager hält die Fenster aller Instanzen im Hintergrund und holt das gewünschte
/// nach vorn. Ein Fenster, das sich selbst mit einer anderen Instanz neu startet,
/// nähme dabei genau die Instanz mit, aus der heraus jemand wechselt — und das ist
/// der Vorfall, mit dem dieses Vorhaben angefangen hat (#529).
///
public const string ManagedArgument = "--managed";
///
/// Der Instanzpfad hinter --instance, oder null.
///
/// Bewusst ohne Prüfung, ob es das Verzeichnis gibt — das entscheidet der
/// Aufrufer, und er entscheidet es unterschiedlich: Mit Fenster erscheint dann der
/// Auswahldialog, ohne Fenster ist es ein Abbruch mit Meldung.
///
public static string? ReadInstancePath(IReadOnlyList? args)
{
if (args is null) return null;
for (var i = 0; i < args.Count - 1; i++)
{
if (string.Equals(args[i], InstanceArgument, StringComparison.OrdinalIgnoreCase))
return args[i + 1];
}
return null;
}
/// #713: Only the stdio bridge to a running instance's MCP server — no application.
public static bool IsMcpBridge(IReadOnlyList? args)
=> Has(args, Core.Mcp.McpStdioBridge.Argument);
public static bool IsHeadless(IReadOnlyList? args)
=> Has(args, HeadlessArgument);
///
public static bool IsManaged(IReadOnlyList? args)
=> Has(args, ManagedArgument);
private static bool Has(IReadOnlyList? args, string flag)
=> args is not null
&& args.Any(a => string.Equals(a, flag, StringComparison.OrdinalIgnoreCase));
}