;; Market price display components

(defcomp ~market-price-special (&key price)
  (div :class "text-lg font-semibold text-emerald-700" price))

(defcomp ~market-price-regular-strike (&key price)
  (div :class "text-sm line-through text-stone-500" price))

(defcomp ~market-price-regular (&key price)
  (div :class "mt-1 text-lg font-semibold" price))

(defcomp ~market-price-line (&key inner)
  (div :class "mt-1 flex items-baseline gap-2 justify-center" inner))

(defcomp ~market-header-price-special-label ()
  (div :class "text-md font-bold text-emerald-700" "Special price"))

(defcomp ~market-header-price-special (&key price)
  (div :class "text-xl font-semibold text-emerald-700" price))

(defcomp ~market-header-price-strike (&key price)
  (div :class "text-base text-md line-through text-stone-500" price))

(defcomp ~market-header-price-regular-label ()
  (div :class "hidden md:block text-xl font-bold" "Our price"))

(defcomp ~market-header-price-regular (&key price)
  (div :class "text-xl font-semibold" price))

(defcomp ~market-header-rrp (&key rrp)
  (div :class "text-base text-stone-400" (span "rrp:") " " (span rrp)))

(defcomp ~market-prices-row (&key inner)
  (div :class "flex flex-row items-center justify-between md:gap-2 md:px-2" inner))


;; ---------------------------------------------------------------------------
;; Composition: prices header + cart button from data
;; ---------------------------------------------------------------------------

(defcomp ~market-prices-header-from-data (&key cart-id cart-action csrf quantity cart-href
                                               sp-val sp-str rp-val rp-str rrp-str)
  (~market-prices-row :inner
    (<>
      (if quantity
        (~market-cart-add-quantity :cart-id cart-id :action cart-action :csrf csrf
          :minus-val (str (- quantity 1)) :plus-val (str (+ quantity 1))
          :quantity (str quantity) :cart-href cart-href)
        (~market-cart-add-empty :cart-id cart-id :action cart-action :csrf csrf))
      (when sp-val
        (<> (~market-header-price-special-label)
            (~market-header-price-special :price sp-str)
            (when rp-val (~market-header-price-strike :price rp-str))))
      (when (and (not sp-val) rp-val)
        (<> (~market-header-price-regular-label)
            (~market-header-price-regular :price rp-str)))
      (when rrp-str (~market-header-rrp :rrp rrp-str)))))

;; Card price line from data (used in product cards)
(defcomp ~market-card-price-from-data (&key sp-val sp-str rp-val rp-str)
  (~market-price-line :inner
    (<>
      (when sp-val
        (<> (~market-price-special :price sp-str)
            (when rp-val (~market-price-regular-strike :price rp-str))))
      (when (and (not sp-val) rp-val)
        (~market-price-regular :price rp-str)))))
