     :ai-play (play-game-turn! (ai/best-move @current-turn @current-player))
     :player-move (play-game-turn! (second msg))
     ))
-

;; Private
;; -----------------------------------------

(def is-ai? #{:red :green})

(defonce app-state
  (reagent/atom
    {:game (game/new-game)
     :help false}))

(defn play-game-turn! [move]
  (swap! app-state update :game game/play-move move))



;; Public API (updates)
;; -----------------------------------------

(s/def ::game-event
  (s/or
    :no-params (s/tuple #{:new-game :toggle-help :restart :undo :ai-play})
    :player-move (s/tuple #{:player-move} ::board/coord)))

(s/fdef send-event! :args (s/tuple ::game-event))

(defn- send-event!
  [msg]
  (case (first msg)
