Files
clickthrough/server/actions.py
2026-04-05 19:15:12 +02:00

35 lines
1.1 KiB
Python

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}"