#!/usr/bin/env python3 """ Reality State Engine Hanterar objektets livscykel """ from enum import Enum from datetime import datetime class RealityState(Enum): NORMAL = "normal" WATCH = "watch" WARNING = "warning" CRITICAL = "critical" VERIFICATION = "verification" RESOLVED = "resolved" class StateEngine: """Hanterar state-övergångar""" def __init__(self): self.transitions = { RealityState.NORMAL: [RealityState.WATCH, RealityState.WARNING, RealityState.CRITICAL], RealityState.WATCH: [RealityState.NORMAL, RealityState.WARNING, RealityState.CRITICAL], RealityState.WARNING: [RealityState.NORMAL, RealityState.WATCH, RealityState.CRITICAL, RealityState.VERIFICATION], RealityState.CRITICAL: [RealityState.VERIFICATION, RealityState.WARNING], RealityState.VERIFICATION: [RealityState.RESOLVED, RealityState.CRITICAL], RealityState.RESOLVED: [RealityState.NORMAL] } def calculate_state(self, risks): """Beräkna state baserat på risker""" if not risks: return RealityState.NORMAL severities = [r["severity"] for r in risks] if "critical" in severities: return RealityState.CRITICAL elif "high" in severities: return RealityState.WARNING elif "medium" in severities: return RealityState.WATCH return RealityState.NORMAL def can_transition(self, current_state, new_state): """Kontrollera om övergång är tillåten""" return new_state in self.transitions.get(current_state, []) def transition(self, road_id, current_state, new_state, reason=""): """Utför state-övergång""" if not self.can_transition(current_state, new_state): return None return { "road_id": road_id, "from_state": current_state.value, "to_state": new_state.value, "timestamp": datetime.now().isoformat(), "reason": reason } if __name__ == "__main__": engine = StateEngine() # Testa risks = [{"severity": "critical"}] state = engine.calculate_state(risks) print(f"State med critical risk: {state.value}") risks = [{"severity": "high"}] state = engine.calculate_state(risks) print(f"State med high risk: {state.value}") risks = [] state = engine.calculate_state(risks) print(f"State utan risker: {state.value}")