(ns claire-agent.intents.purchase-lookup
  (:require
   [claire-common.utils :as utils]
   [claire-common.dialogflow :as df]
   [claire-agent.api :as api])
  (:require-macros
   [claire-common.flow :as flow]))

;; Intents Hooks

(defn purchase-lookup [intent query env pars]
  (let [q (api/start-query "000" query)]
    (utils/make-reply
     (utils/clear-contexts env ["purchase-lookup"])
     :env { :query q }
     :say "Start looking for suppliers")))

(defn purchase-lookup-wait [intent query env pars]
  (let [found (= "finished" (:status (api/query "000" query)))
        jump-to-finish #(utils/make-reply
                         env
                         :export true
                         :event "purchase-lookup-finished")]
    (if (true? found)
      (jump-to-finish)
      (do
        (utils/active-wait 3500 #(api/query "000" query))
        (if (true? (api/query "000" query))
          (jump-to-finish)
          (utils/make-reply
           (utils/clear-contexts env ["purchase-lookup"])
           :say "Still looking for suppliers"))))))

(defn purchase-lookup-finished [intent query env pars]
  (utils/make-reply
   env
   :say "Found suppliers"))

(flow/make-flow
 (df/intent
   purchase-lookup
   (concat utils/yes utils/no ["look up"])
   ["I am going to search for the best offer
     now. This may take a while. Shall I
     continue?"] 
   {:events ["purchase-lookup"]
    :contexts ["purchase-lookup"]
    :followups 
    [(df/intent
      purchase-lookup-wait
      utils/yes
      ["Looking up. Shall I continue?"] 
      {:events ["purchase-lookup-wait"]
       :followups
       [(df/redirect
         utils/yes
         "purchase-lookup-wait"
         "purchase-lookup-followup")
        (df/intent
         purchase-lookup-send-notification
         utils/no
         ["OK. I will send you a notification when I am done."] 
         {:reset true})]})
     (df/intent
      purchase-lookup-finished
      ["purchase-lookup-wait"]
      ["Lookup completed"]
      {:contexts ["purchase-lookup-finished"]
       :reset true
       :events ["purchase-lookup-finished"]})]}))
