from __future__ import annotations from typing import Tuple from .models import ActionPayload, ActionResult class ActionEngine: def __init__(self, grid) -> None: self.grid = grid def plan(self, payload: ActionPayload) -> ActionResult: coords = self._resolve_coords(payload.target_cell) detail = self._describe(payload, coords) return ActionResult( success=True, detail=detail, coordinates=coords, payload={"comment": payload.comment or "", "text": payload.text or ""}, ) def _resolve_coords(self, target_cell: str | None) -> Tuple[int, int] | None: if not target_cell: return None return self.grid.resolve_cell_center(target_cell) def _describe( self, payload: ActionPayload, coords: Tuple[int, int] | None ) -> str: cell_info = payload.target_cell or "free space" location = f"@{cell_info}" if coords else "(no target)" action_hint = payload.action.value extra = f" text='{payload.text}'" if payload.text else "" return f"Plan {action_hint} {location}{extra}"