       board
       (conj moves (empty-cell-conversion (:winner move) (:point move)))
       )))
+
+
+;; (require '[clojure.test.check.generators :as gen])
+;; (def b (first (gen/sample (s/gen ::board/board) 1)))
+
+(defn available-transitions
+  [board]
+  (map
+
+    (fn [[winner moves-by-pos]]
+      [winner
+       (into {}
+         (map (fn [[pos moves]]
+                [pos {:transition moves
+                      :board (delay (apply-conversions board moves))}]
+                ))
+         moves-by-pos)
+       ])
+
+    (transduce
+      (mapcat #(available-conversions-at board %))
+      #(update-in %1 [(:winner %2) (:point %2)] conj %2)    ;; TODO - List of conversions
+      {}
+      (board/empty-cells board)))
+  )



#_(s/fdef all-available-moves
  :args (s/tuple ::board/board)
  :ret ::available-moves)

#_(s/fdef apply-conversion
  :args (s/tuple ::board/board ::conversion)
  :ret ::board/board)


(defn all-available-moves

         taken []]
    (let [cell (board/get-cell-at board coord)]
      (cond
        (is-not-convertible? cell) nil                      ;; No move: reached end and only 1 type of cell
        (and looser (not= looser cell)) {:winner cell       ;; Who wins the cells
                                         :looser looser     ;; Who looses the cells
                                         :point init-coord  ;; The move performed
                                         :taken taken}      ;; The cells taken
        :else (recur
                (next-coord coord)
                cell
