package com.ruoyi.shadow.kernel; import com.ruoyi.ft546.protocol.Ft546EncodedCommand; import com.ruoyi.ft546.protocol.Ft546SrgvCommandIntent; import com.ruoyi.wcs.application.dispatch.DispatchCycleResult; import java.util.ArrayList; import java.util.Collections; import java.util.List; public final class ShadowCycleResult { private final String statusCode; private final String reasonCode; private final DispatchCycleResult decisions; private final List intents; private final List encodedCommands; private ShadowCycleResult(String statusCode, String reasonCode, DispatchCycleResult decisions, List intents, List encodedCommands) { this.statusCode = statusCode; this.reasonCode = reasonCode; this.decisions = decisions; this.intents = immutable(intents); this.encodedCommands = immutable(encodedCommands); } public static ShadowCycleResult insufficient(String reasonCode) { return new ShadowCycleResult("INSUFFICIENT_FACTS", reasonCode, null, Collections.emptyList(), Collections.emptyList()); } public static ShadowCycleResult retry(DispatchCycleResult decisions) { return new ShadowCycleResult("RETRY_SNAPSHOT_CHANGED", "SHADOW_TRAFFIC_STATE_CHANGED", decisions, Collections.emptyList(), Collections.emptyList()); } public static ShadowCycleResult comparable( DispatchCycleResult decisions, List intents, List encodedCommands) { return new ShadowCycleResult("COMPARABLE", null, decisions, intents, encodedCommands); } public static ShadowCycleResult degraded(String reasonCode) { return new ShadowCycleResult("DEGRADED", reasonCode, null, Collections.emptyList(), Collections.emptyList()); } public String getStatusCode() { return statusCode; } public String getReasonCode() { return reasonCode; } public DispatchCycleResult getDecisions() { return decisions; } public List getIntents() { return intents; } public List getEncodedCommands() { return encodedCommands; } private static List immutable(List source) { return Collections.unmodifiableList(new ArrayList(source)); } }