namespace NATS.Server.Configuration;

public sealed class GatewayOptions
{
    public string? Name { get; set; }
    public string Host { get; set; } = "0.0.0.0";
    public int Port { get; set; }
    public List<string> Remotes { get; set; } = [];

    // Go: opts.go — gateway authorization fields
    public bool RejectUnknown { get; set; }
    public string? Username { get; set; }
    public string? Password { get; set; }
    public double AuthTimeout { get; set; }
    public string? Advertise { get; set; }
    public int ConnectRetries { get; set; }
    public bool ConnectBackoff { get; set; }
    public TimeSpan WriteDeadline { get; set; }

    // Go: opts.go — gateways remotes list (RemoteGatewayOpts)
    public List<RemoteGatewayOptions> RemoteGateways { get; set; } = [];
}

/// <summary>
/// Go: opts.go RemoteGatewayOpts struct — a single remote gateway entry.
/// </summary>
public sealed class RemoteGatewayOptions
{
    public string? Name { get; set; }
    public List<string> Urls { get; set; } = [];
}
