from Copilot.numericLayer.Core.ruleHits import *
from Copilot.numericLayer.Core.SignalInsight import SignalInsight, SignalStatus

class SignalStatusResolver:

    CRITICAL_RULES = {
        ThreshRuleHits.ABOVE_MAX,
        ThreshRuleHits.BELOW_MIN,
    }

    WARNING_RULES = {
        TrendRuleHits.RISING,
        TrendRuleHits.FALLING,
        OtherRuleHits.SUDDEN_JUMP,
    }

    def apply(self, signal: SignalInsight) -> SignalInsight:

        rule_hits = set(signal.rule_hits)

        if rule_hits & self.CRITICAL_RULES:
            signal.status = SignalStatus.CRITICAL

        elif rule_hits & self.WARNING_RULES:
            signal.status = SignalStatus.WARNING

        else:
            signal.status = SignalStatus.NORMAL

        return signal