;; This Source Code Form is subject to the terms of the Mozilla Public
;; License, v. 2.0. If a copy of the MPL was not distributed with this
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
;;
;; Copyright (c) KALEIDOS INC Sucursal en España SL

(ns app.main.data.viewer.shortcuts
  (:require
   [app.main.data.common :as dcm]
   [app.main.data.event :as ev]
   [app.main.data.profile :as du]
   [app.main.data.shortcuts :as ds]
   [app.main.data.viewer :as dv]
   [app.main.store :as st]))

(def shortcuts
  {:increase-zoom      {:tooltip "+"
                        :command "+"
                        :subsections [:zoom-viewer]
                        :section [:viewer]
                        :fn #(st/emit! dv/increase-zoom)}

   :toggle-theme    {:tooltip (ds/alt "M")
                     :command (ds/a-mod "m")
                     :section [:viewer]
                     :subsections [:generic]
                     :fn #(st/emit! (with-meta (du/toggle-theme)
                                      {::ev/origin "viewer:shortcuts"}))}

   :decrease-zoom      {:tooltip "-"
                        :command "-"
                        :section [:viewer]
                        :subsections [:zoom-viewer]
                        :fn #(st/emit! dv/decrease-zoom)}

   :select-all         {:tooltip (ds/meta "A")
                        :command (ds/c-mod "a")
                        :section [:viewer]
                        :subsections [:generic]
                        :fn #(st/emit! (dv/select-all))}

   :reset-zoom         {:tooltip (ds/shift "0")
                        :command "shift+0"
                        :section [:viewer]
                        :subsections [:zoom-viewer]
                        :fn #(st/emit! dv/reset-zoom)}

   :toggle-zoom-style  {:tooltip "F"
                        :command "f"
                        :section [:viewer]
                        :subsections [:zoom-viewer]
                        :fn #(st/emit! dv/toggle-zoom-style)}

   :toggle-fullscreen  {:tooltip (ds/shift "F")
                        :command ["shift+f" "alt+enter"]
                        :section [:viewer]
                        :subsections [:zoom-viewer]
                        :fn #(st/emit! dv/toggle-fullscreen)}

   :prev-frame         {:tooltip ds/left-arrow
                        :command ["left" "up" "shift+enter" "pageup" "shift+space"]
                        :subsections [:generic]
                        :section [:viewer]
                        :fn #(st/emit! dv/select-prev-frame)}

   :next-frame         {:tooltip ds/right-arrow
                        :command ["right" "down" "enter" "pagedown" "space"]
                        :subsections [:generic]
                        :section [:viewer]
                        :fn #(st/emit! dv/select-next-frame)}

   :open-inspect       {:tooltip "G I"
                        :command "g i"
                        :subsections [:navigation-viewer]
                        :section [:viewer]
                        :fn #(st/emit! (dv/go-to-section :inspect))}

   :open-comments      {:tooltip "G C"
                        :command "g c"
                        :subsections [:navigation-viewer]
                        :section [:viewer]
                        :fn #(st/emit! (dv/go-to-section :comments))}

   :open-interactions  {:tooltip "G V"
                        :command "g v"
                        :subsections [:navigation-viewer]
                        :section [:viewer]
                        :fn #(st/emit! (dv/go-to-section :interactions))}

   :open-workspace     {:tooltip "G W"
                        :command "g w"
                        :subsections [:navigation-viewer]
                        :section [:viewer]
                        :fn #(st/emit! (dcm/go-to-workspace))}})

(defn get-tooltip [shortcut]
  (assert (contains? shortcuts shortcut) (str shortcut))
  (get-in shortcuts [shortcut :tooltip]))
