from typing import Any, Optional
from core.blackboard import Blackboard
from core.scheduler import Scheduler
from core.model_pool import get_config, ModelConfig, ALIAS_MAP


class Router:
    """
    Tiered Cognition Router.
    Limbic (Small) -> Hybrid (Standard) -> Powerhouse (Deep).
    Uses ModelPool for configuration.
    """

    def __init__(self, blackboard: Blackboard, scheduler: Scheduler):
        self.bb = blackboard
        self.scheduler = scheduler

    def triage(self, input_data: Any) -> str:
        """
        Salience-based routing.
        Returns: 'SMALL', 'HYBRID', or 'POWERHOUSE'
        """
        if self._is_routine(input_data):
            return "SMALL"

        current_salience = self.bb.read("current_salience") or 1.0

        if self.scheduler.should_escalate(current_salience):
            return "POWERHOUSE"

        return "HYBRID"

    def _is_routine(self, data: Any) -> bool:
        if isinstance(data, str) and len(data) < 50:
            return True
        return False

    def get_model(self, tier: str) -> str:
        """Returns model_id from ModelPool for given tier."""
        role = ALIAS_MAP.get(tier.lower(), f"router_{tier.lower()}")
        config = get_config(role)
        if config:
            return config.model_id
        return "gemini-1.5-pro"

    def get_config(self, tier: str) -> Optional[ModelConfig]:
        """Returns full ModelConfig for given tier."""
        role = ALIAS_MAP.get(tier.lower(), f"router_{tier.lower()}")
        return get_config(role)
