namespace ZB.MOM.WW.ScadaBridge.Host;

public class NodeOptions
{
    /// <summary>Gets or sets the node role (e.g. Central or Site).</summary>
    public string Role { get; set; } = string.Empty;
    /// <summary>Gets or sets the hostname or IP address this node advertises to the Akka cluster.</summary>
    public string NodeHostname { get; set; } = string.Empty;

    /// <summary>
    /// Operator-configured semantic node name used to stamp the SourceNode
    /// column on audit rows. Conventional values are <c>node-a</c>/<c>node-b</c>
    /// on site nodes and <c>central-a</c>/<c>central-b</c> on central nodes,
    /// but the value is a free-form label — no validation is enforced.
    /// </summary>
    public string NodeName { get; set; } = string.Empty;
    /// <summary>Gets or sets the site identifier for site nodes; null for central nodes.</summary>
    public string? SiteId { get; set; }
    /// <summary>Gets or sets the Akka.NET remoting port for cluster communication.</summary>
    public int RemotingPort { get; set; } = 8081;
    /// <summary>Gets or sets the gRPC port for the site stream server.</summary>
    public int GrpcPort { get; set; } = 8083;
    /// <summary>
    /// HTTP/2 (h2c) port the CENTRAL node listens on for the site→central
    /// <c>CentralControlService</c> gRPC control plane. Default 8083 — deliberately symmetric
    /// with the site <see cref="GrpcPort"/>, since a node is either central or a site and the
    /// two never share a process. This listener is distinct from central's <c>:5000</c> HTTP/1
    /// surface (Central UI, Management/Inbound API), which stays exactly as-is: gRPC does NOT go
    /// through Traefik (HTTP/1 only). Ignored on site nodes.
    /// </summary>
    public int CentralGrpcPort { get; set; } = 8083;
    /// <summary>
    /// HTTP/1.1 port serving the Prometheus /metrics scrape endpoint on site nodes.
    /// Defaults to 8084 — deliberately distinct from <see cref="RemotingPort"/> (8082)
    /// and <see cref="GrpcPort"/> (8083) so the Kestrel metrics listener never contends
    /// with the Akka remoting port a site node binds.
    /// </summary>
    public int MetricsPort { get; set; } = 8084;
}
