(ns bigml-nodered-core.utils
  (:require clojure.string))

;; convenience function to be moved to a clj file
;; currently they duplicate omonymous function from macros.clj
(defn escape [name regex replacement]
  (clojure.string/replace (clojure.string/lower-case name) regex replacement))

(defn escape-string [string]
  (escape string " " ""))

(defn escape-name [name]
  (escape name #"[ -]" "_"))

(defn escape-type [name]
  (escape name " " "-"))

(defn escape-camel [name]
  (escape name #"[ -](\w)" #(clojure.string/upper-case (second %1))))

(defn escape-api-name [name]
      (escape name #"[ -]" "_"))

(defn export-nodes [nodes]
  #?(:cljs
     (clj->js (reduce-kv
               (fn [r k v]
                 (assoc r k (first v))) {} nodes))
     :clj nodes))

(defmacro unless [pred a b]
  `(if (not ~pred) ~a ~b))

(defmacro jsassoc [obj key val]
  (let [sym `(symbol (str "-" ~key))]
    `(set! (. ~obj ~'sym)
           (cls->js ~val))))

(defn- str->int [s]
  #?(:clj (Integer/parseInt s)
     :cljs (js/parseInt s)))

(defn cast-config-type [type val]
  (if (= type :number) (str->int val) val))
