using StellaOps.Signals.Models; using System; namespace StellaOps.Signals.Options; /// /// Gate multiplier configuration in basis points (10000 = 100%). /// public sealed class SignalsGateMultiplierOptions { public int AuthRequiredMultiplierBps { get; set; } = 3000; public int FeatureFlagMultiplierBps { get; set; } = 2000; public int AdminOnlyMultiplierBps { get; set; } = 1500; public int NonDefaultConfigMultiplierBps { get; set; } = 5000; public int MinimumMultiplierBps { get; set; } = 500; public int GetMultiplierBps(CallgraphGateType gateType) => gateType switch { CallgraphGateType.AuthRequired => AuthRequiredMultiplierBps, CallgraphGateType.FeatureFlag => FeatureFlagMultiplierBps, CallgraphGateType.AdminOnly => AdminOnlyMultiplierBps, CallgraphGateType.NonDefaultConfig => NonDefaultConfigMultiplierBps, _ => 10000 }; public void Validate() { EnsureBps(nameof(AuthRequiredMultiplierBps), AuthRequiredMultiplierBps); EnsureBps(nameof(FeatureFlagMultiplierBps), FeatureFlagMultiplierBps); EnsureBps(nameof(AdminOnlyMultiplierBps), AdminOnlyMultiplierBps); EnsureBps(nameof(NonDefaultConfigMultiplierBps), NonDefaultConfigMultiplierBps); EnsureBps(nameof(MinimumMultiplierBps), MinimumMultiplierBps); } private static void EnsureBps(string name, int value) { if (value < 0 || value > 10000) { throw new ArgumentOutOfRangeException(name, value, "Value must be between 0 and 10000."); } } }