from __future__ import annotations from collections.abc import Sequence from app.ha.models import HaEntitySummary class Rule: def matches(self, entities: Sequence[HaEntitySummary]) -> bool: raise NotImplementedError def recommendation(self, entities: Sequence[HaEntitySummary]) -> str: raise NotImplementedError class Recommender: def __init__(self, rules: Sequence[Rule]) -> None: self._rules = rules def run(self, entities: Sequence[HaEntitySummary]) -> list[str]: results: list[str] = [] for rule in self._rules: if rule.matches(entities): results.append(rule.recommendation(entities)) return results