"""Market Scanner Agent — selects candidate symbols from the trading universe
based on price change, relative volume, and minimum liquidity."""
from .base import Agent, AgentResult
from ..services.market_data import MarketDataProvider


class MarketScannerAgent(Agent):
    name = "market_scanner"

    def __init__(self, provider: MarketDataProvider, max_candidates: int = 15):
        self.provider = provider
        self.max_candidates = max_candidates

    def scan(self) -> list[dict]:
        """Returns scanner rows sorted by activity score."""
        rows = []
        for item in self.provider.get_universe():
            quote = self.provider.get_quote(item["symbol"])
            activity = abs(quote["change_pct"]) * 10 + quote["relative_volume"] * 15
            rows.append({
                "symbol": item["symbol"],
                "company": item["company"],
                "price": quote["price"],
                "change_pct": quote["change_pct"],
                "volume": quote["volume"],
                "relative_volume": quote["relative_volume"],
                "activity_score": round(min(100, activity), 1),
            })
        rows.sort(key=lambda r: r["activity_score"], reverse=True)
        return rows

    def run(self, context: dict) -> AgentResult:
        rows = self.scan()
        candidates = rows[: self.max_candidates]
        return AgentResult(
            agent=self.name,
            score=100.0,
            data={"rows": rows, "candidates": candidates},
            notes=[f"Scanned {len(rows)} symbols, selected top {len(candidates)} by activity"],
        )
