file_uuid]. * Batched (one query) so the event list can show a thumbnail per row without an N+1. * Events with no snapshot are simply absent from the map. */ public function thumbUuidsFor(array $eventIds): array; /** Most recent snapshot for a camera, as ['file_uuid' => ..., 'device_id' => ...], or null. * Backs the zone editor's "load the latest frame" button: an operator draws hazard zones * over what the camera actually sees instead of guessing coordinates on a blank canvas. * device_id comes back so the caller can site-scope the result. */ public function latestForCamera(string $cameraId): ?array; /** Delete snapshot files + rows created before $cutoff (unix ts). PIPA retention: * worker images must not be kept forever. Returns the number purged. */ public function purgeOlderThan(int $cutoff): int; }