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

;; Intents Hooks

(defn purchase-review [intent query env pars]
  (utils/make-reply
   env
   :state { "parameterName" (get pars "parameterName") }
   :say "Specify value to correct"))

(defn purchase-correct-parameter [intent query env pars]
  (let [parameterName (get (:state env) "parameterName")]
    (utils/make-reply
     env 
     :state { parameterName query
              (str parameterName ".original") query }
     :say "Correct another parameter?")))

(defn purchase-corrected [intent query env pars]
  (utils/make-reply
   (utils/clear-env
    env
    :state ["parameterName" "parameterName.original"])))

(flow/make-flow
  (df/intent
   purchase-review
   ["Correct $parameterName"
    "Correct order"
    "I would like to correct an order"]
   ["Please give new value for item"]
   {:events ["purchase-review"]
    :parameters
    [(df/parm "parameterName" "claire_orderParameter"
              ["Which order item would you like to change?"])]
    :followups
    [(df/intent
      purchase-corrected
      ["none, look up" "look up", "done, look up" "I am done"]
      ["Ok, your order is final now"]
      {})
     (df/intent
      purchase-correct-parameter
      []
      ["I got your corrected order item. More changes?"]
      {:followups
       [(df/redirect
         utils/yes
         "purchase-review")
        (df/redirect
         ["look up" "no"]
         "purchase-lookup"
         "purchase-correct-parameter-purchase-lookup")]})]}))
