!7

concept Musing {
  S text;
  S verificationResult;
  
  sS _fieldOrder = "text verificationResult";
}

cmodule AIMusingsCRUD > DynCRUD<Musing> {
  // API
  
  void storeMusing(S text) {
    storeMusing(text, null);
  }
  
  void storeMusing(S text, S verificationResult) {
    Musing m = uniq Musing(+text);
    if (nempty(verificationResult)) cset(m, +verificationResult);
    else
      dm_q(r { testMusing(m) });
  }
  
  void testMusing(Musing m) {
    if (m == null) ret;
    try {
      int n = ai_checkMusing(m.text);
      cset(m, verificationResult := "OK (" + n + ")");
    } catch print e {
      cset(m, verificationResult := "ERROR: " + exceptionToStringShort(e));
    }
  }
  
  start {
    crud.multiLineFields = litset("text");
  }
  
  afterVisualize {
    addSelectionDependentButton("Test", r { testMusing(selected()) });
  }
}