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

;; Intents Hooks

(defn purchase-choose-bidder [intent query env pars]
  (utils/make-reply
   (utils/make-env {} :merge? false)
   :say (if (= "Known"
               (get pars "knownUnknown"))
          "The best offer I found is: XYZ. Make a bid?"
          "The best offer I found is: ABC. Make a bid?")))

(defn purchase-gather-bid [intent query env pars]
  (utils/make-reply (utils/make-env {} :merge? false)
                    :say (if (= "Known"
                                (get (:state env) "knownUnknown"))
                           "What's your bid XYZ?"
                           "What's your bid ABC?")))

(defn purchase-bid-confirmation [intent query env pars]
  (utils/make-reply (utils/make-env {} :merge? false)
                    :say "Confirm bid and send it?"))

(defn purchase-make-bid [intent query env pars]
  (utils/make-reply (utils/make-env {} :merge? false)
                    :say "Bid sent"))

(defn purchase-accept-bid [intent query env pars]
  (utils/make-reply (utils/make-env {} :merge? false)
                    :say "Bid sent"))

(flow/make-flow
 (df/intent
   purchase-choose-bidder
   ["Review bids from $knowUnknown suppliers"
    "Choose $knownUnknow bid"]
   ["This is the best bidder. Shall I make a new offer?"]
   {:events ["purchase-choose-bidder"]
    :parameters
    [{:displayName "knownUnknown"
      :value "$knownUnknown"
      :defaultValue ""
      :entityTypeDisplayName "@claire_knownUnknown"
      :mandatory true
      :prompts
      ["Ok. Shall I consider known or also unknown bidders?"]
      "isList" false}]
    :followups
    [(df/intent
      purchase-gather-bid
      utils/yes
      ["What is your bid?"]
      {:events ["purchase-gather-bid"]
       :followups
       [(df/intent
         purchase-bid-confirmation
         []
         ["Confirm bid and send it?"]
         {:followups
          [(df/intent
            purchase-make-bid
            utils/yes
            ["Bid made. Will notify."]
            {})
           (df/redirect utils/no
                        "purchase-gather-bid"
                        ["purchase-choose-bidder-followup"])
           (df/redirect ["change bidder"]
                        "purchase-choose-bidder")]})]})
     (df/intent
      purchase-ask-choose-bidder
      utils/no
      ["Would you like choose a different bidder?"]
      {:followups
       [(df/redirect utils/yes "purchase-choose-bidder")
        (df/intent
         purchase-choose-bid-end
         utils/no
         ["Let me know how else can I help you!"])]})
     (df/intent
      purchase-accept-bid
      ["accept" "accept bid" "accept current offer"]
      ["Bid sent"]
      {})]}))
