from typing import TypedDict, List class DoorSummary(TypedDict): total_events: int opened_count: int closed_count: int locked_count: int unlocked_count: int def summarize_door_events(events: List[dict], door_id: str) -> DoorSummary: """Summarize events for a single door_id.""" opened = closed = locked = unlocked = 0 for e in events: if str(e.get("door_id")) != door_id: continue etype = str(e.get("event_type", "")).lower() if etype == "opened": opened += 1 elif etype == "closed": closed += 1 elif etype == "locked": locked += 1 elif etype == "unlocked": unlocked += 1 total = opened + closed + locked + unlocked return { "total_events": total, "opened_count": opened, "closed_count": closed, "locked_count": locked, "unlocked_count": unlocked, } if __name__ == "__main__": events = [ {"door_id": "front_door", "event_type": "opened"}, {"door_id": "front_door", "event_type": "closed"}, {"door_id": "front_door", "event_type": "locked"}, ] print(summarize_door_events(events, "front_door"))