from Copilot.numericLayer.Filters.Rule.ruleBaseFilter import BaseRuleFilter
from Copilot.numericLayer.Core.SignalInsight import SignalInsight

class RuleFilterPipeline:

    def __init__(self, filters: list[BaseRuleFilter]):
        self.filters = filters

    def apply(self, signal:SignalInsight):

        filtered_sets = []

        for f in self.filters:
            filtered_rules = f.apply(signal)
            filtered_sets.append(set(filtered_rules))

        if not filtered_sets:
            return signal

        common_rules = set.intersection(*filtered_sets)

        signal.rule_hits = list(common_rules)

        return signal