(ns mini-program-cljs.core
  (:require-macros [mini-program-cljs.macro
                    :refer [call-promise-1 wx-fun-dev wx-fun]])
  (:require
   [mini-program-cljs.request :refer [request]]
   [mini-program-cljs.util :refer
    [alert switch-router set-storage-sync get-storage-sync
     tel-phone set-title]
    :as util]
   [mini-program-cljs.login :refer [login get-user-info]]
   [mini-program-cljs.js-wx :refer [mini-program current-page] :as js-wx]
   [mini-program-cljs.components.timer :as timer]
   [mini-program-cljs.uuid :as uuid]
   [mini-program-cljs.clj-core :as clj-core]
   [mini-program-cljs.datalog :as datalog]
   [mini-program-cljs.parser :as parser]))

(def ^:export Storage
  #js {:getSync get-storage-sync
       :setSync set-storage-sync})

(def ^:export MiniCljs
  #js {:request request
       :alert alert
       :login login
       :switchRouter switch-router
       :getUserInfo get-user-info
       :telPhone tel-phone
       :setTitle set-title
       :getCurrentPage util/get-current-page
       :timerComponent timer/timer-component
       :genUUID uuid/v1})

(def ^:export CljCore
  #js {:cljFlatten clj-core/clj-flatten
       :postwalkTreeOp clj-core/postwalk-tree-op
       :insertNavToTree clj-core/insert-nav->tree
       :filterTreeAsList clj-core/filter-tree-as-list
       :updateNavData clj-core/update-nav-data
       :enterEventInsertFlatlist clj-core/enter-event-insert-flatlist})

(comment
  (.-version MPCljs) ;;=> "0.3.6"

  ;; 调用了defn-js定义login函数之后:
  (.-login MPCljs)
  ;; => #object[mini_program_cljs$login$login]
  )
(def ^:export MPCljs js-wx/export-js)

(def ^:export Datalog
  #js {:recursiveRule datalog/recursive-rule
       :getNavPath  datalog/get-nav-path})

(def ^:export Parser
  #js {:parserTest parser/parser-test
       :parserTest2 parser/parser-test2
       :linkParse2 parser/link-parse2
       :linkTransform2 parser/link-transform2
       :parserToJsobj parser/parser->jsobj})
