using System.Text.Json;
namespace ZB.MOM.WW.ScadaBridge.DelmiaNotifier;
/// Reads and interprets the notifier's configuration and secret. Parse logic is string-based so it is unit-testable without touching disk.
internal static class ConfigLoader
{
private const string ApiKeyEnvVar = "SCADABRIDGE_API_KEY";
/// Deserialize the appsettings.json text via the source-gen context.
public static NotifierConfig Load(string jsonText) =>
JsonSerializer.Deserialize(jsonText, NotifierJsonContext.Default.NotifierConfig) ?? new NotifierConfig();
/// Read and parse the appsettings.json sitting next to the executable.
public static NotifierConfig LoadFromDefaultFile()
{
var path = Path.Combine(AppContext.BaseDirectory, "appsettings.json");
return Load(File.ReadAllText(path));
}
/// Split a comma-separated base-URL list into trimmed, non-empty entries.
public static string[] SplitBaseUrls(string? baseUrls)
{
if (string.IsNullOrWhiteSpace(baseUrls))
{
return [];
}
return baseUrls.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
}
/// Resolve the API key from SCADABRIDGE_API_KEY; null/whitespace → null. Env accessor is injected for testability.
public static string? ResolveApiKey(Func envGet)
{
var key = envGet(ApiKeyEnvVar);
return string.IsNullOrWhiteSpace(key) ? null : key;
}
}