"""Lightweight counters and director summary helpers.""" from __future__ import annotations from dataclasses import dataclass, field from typing import Any, Dict @dataclass class DayCounters: enters: int = 0 sales: int = 0 revenue: int = 0 by_phase: Dict[str, int] = field(default_factory=dict) def on_enter(self, phase: str) -> None: self.enters += 1 self.by_phase[phase] = self.by_phase.get(phase, 0) + 1 def on_sale(self, amount: int) -> None: self.sales += 1 self.revenue += int(amount) def summarize_director(raw: Dict[str, Any]) -> Dict[str, float]: """Summarize director counters into rates used by playtests.""" enters = float(raw.get("enters") or 0) attempts = float(raw.get("enter_attempts") or 0) sales = float(raw.get("sales") or 0) enter_rate = (enters / attempts) if attempts > 0 else 0.0 sale_rate = (sales / enters) if enters > 0 else 0.0 return { "enter_rate": enter_rate, "sale_rate": sale_rate, "enters": enters, "sales": sales, }