Move SSD initial guess mutation to typed Kotlin

ober

7bf6a9dad4f4908723a91fe897d159e842027810

diff --git a/templates/ssd-review.ss b/templates/ssd-review.ss
index 5e56fdc..c8e11ec 100644
--- a/templates/ssd-review.ss
+++ b/templates/ssd-review.ss
@@ -1249,7 +1249,7 @@
 
     (typed-kotlin-file "com/sfb/ssdreview/GuessingHelpers.kt"
       (typed-library (com sfb ssdreview)
-        (export guessForGroup)
+        (export guessForGroup applyInitialGuessToGroup)
         (type Int32)
         (type Float32)
         (type FloatArray)
@@ -1329,7 +1329,24 @@
                             (make-Guess
                               (string-append (int32->string count) " boxes")
                               ""
-                              "unclassified detected group")))))))))))))
+                              "unclassified detected group")))))))))))
+        (def (applyInitialGuessToGroup (group : SsdGroup)
+                                       (guess : Guess)
+                                       (boxTypeId : (Nullable String))) : Unit
+          (begin
+            (SsdGroup-label-set!
+              group
+              (string-append (Guess-label guess) "?"))
+            (if (nullable-null? boxTypeId)
+                (begin)
+                (SsdGroup-boxTypeId-set! group (nullable-get boxTypeId)))
+            (SsdGroup-notes-set!
+              group
+              (string-append
+                "Guess: "
+                (string-append
+                  (Guess-label guess)
+                  (string-append ", " (Guess-reason guess)))))))))
 
     (typed-kotlin-file "com/sfb/ssdreview/OcrModels.kt"
       (typed-library (com sfb ssdreview)
@@ -2648,9 +2665,7 @@
        "            if (!shouldReplaceGuessLabel(group.status, group.label)) return@forEach"
        "            val guess = guessForGroup(group, session.imageWidth, session.imageHeight, race)"
        "            val boxType = BoxTypes.resolve(context, guess.boxType)"
-       "            group.label = \"${guess.label}?\""
-       "            group.boxTypeId = boxType?.id ?: group.boxTypeId"
-       "            group.notes = \"Guess: ${guess.label}, ${guess.reason}\""
+       "            applyInitialGuessToGroup(group, guess, boxType?.id)"
        "        }"
        "    }"
        ""