(ns claire-agent.client
  (:require 
   [claire-common.utils :as utils]
   [clojure.core.async
    :as async
    :refer [>! <! go chan buffer close! put! alts! timeout]])
  (:require-macros
   [claire-common.macros :as macros :refer [<? go-try]]))

(def ^:private df (js/require "dialogflow"))

(defn- request [session-path query]
  (clj->js {:session session-path,
    :queryInput {:text {:text query, :languageCode "en-US"}}}))

(defn query [project-id session-id query-text]
  (let [sc (.-SessionsClient df)
        sc (sc.)
        sp (.sessionPath sc project-id session-id)
        req (request sp query-text)]
    
    (go-try
      (<? (utils/funnel (.detectIntent sc req))))))
