;; Extension — multi-document index + tag filtering.

(st-bootstrap-classes!)
(content/bootstrap!)
(content-bootstrap-text!)

(define
  a
  (doc-with-meta
    (doc-append (doc-empty "a") (mk-text "p" "first post"))
    {:title "A" :tags (list "sx" "news")}))
(define
  b
  (doc-with-meta
    (doc-append (doc-empty "b") (mk-text "p" "second post"))
    {:title "B" :tags (list "news")}))
(define
  c
  (doc-with-meta
    (doc-append (doc-empty "c") (mk-text "p" "third"))
    {:title "C" :tags (list "sx")}))
(define docs (list a b c))

;; ── index = list of summaries ──
(define idx (content/index docs))
(content-test "index count" (len idx) 3)
(content-test
  "index titles"
  (map (fn (s) (get s :title)) idx)
  (list "A" "B" "C"))
(content-test
  "index ids"
  (map (fn (s) (get s :id)) idx)
  (list "a" "b" "c"))
(content-test "index excerpt" (get (first idx) :excerpt) "first post")

;; ── has-tag? ──
(content-test "has-tag yes" (content/has-tag? a "news") true)
(content-test "has-tag no" (content/has-tag? c "news") false)

;; ── index-by-tag (category page) ──
(content-test
  "by-tag news"
  (map (fn (s) (get s :id)) (content/index-by-tag docs "news"))
  (list "a" "b"))
(content-test
  "by-tag sx"
  (map (fn (s) (get s :id)) (content/index-by-tag docs "sx"))
  (list "a" "c"))
(content-test "by-tag none" (content/index-by-tag docs "missing") (list))

;; ── all-tags (tag cloud, deduped, document order) ──
(content-test "all-tags" (content/all-tags docs) (list "sx" "news"))
(content-test "all-tags empty" (content/all-tags (list)) (list))
(content-test
  "all-tags untagged"
  (content/all-tags (list (doc-empty "x")))
  (list))

;; ── empty index ──
(content-test "empty index" (content/index (list)) (list))
