package main import ( "sort" "sdr-wideband-suite/internal/pipeline" ) func enforceDecisionBudgets(decisions []pipeline.SignalDecision, maxRecord int, maxDecode int) (int, int) { recorded := 0 decoded := 0 order := make([]int, len(decisions)) for i := range decisions { order[i] = i } sort.SliceStable(order, func(i, j int) bool { return decisions[order[i]].Candidate.SNRDb > decisions[order[j]].Candidate.SNRDb }) for _, idx := range order { if decisions[idx].ShouldRecord { if maxRecord > 0 && recorded >= maxRecord { decisions[idx].ShouldRecord = false decisions[idx].Reason = "recording budget exceeded" } else { recorded++ } } if decisions[idx].ShouldAutoDecode { if maxDecode > 0 && decoded >= maxDecode { decisions[idx].ShouldAutoDecode = false if decisions[idx].Reason == "" { decisions[idx].Reason = "decode budget exceeded" } } else { decoded++ } } } return recorded, decoded }