
// Pyscript
#let state-use-pyscript = state("state-use-pyscript", false)
#let state-pyscript-version = state("state-pyscript-version", none)
#let state-pyscript-data-list = state("state-pyscript-data-list", (:))
#let state-pyscript-interpreters = state("state-pyscript-interpreters", (:))
#let state-pyscript-default-interpreter = state("state-pyscript-default-interpreter", none)
#let state-pyscript-canvas-ids = state("state-pyscript-canvas-ids", ())

#let reset-pyscript-page-states() = {
  state-use-pyscript.update(x => false)
  state-pyscript-version.update(x => state-pyscript-version)
  state-pyscript-data-list.update(x => (:))
  state-pyscript-interpreters.update(x => (:))
  state-pyscript-default-interpreter.update(x => none)
  state-pyscript-canvas-ids.update(x => ())
}

// CSS / JS / misc tags
#let current-page-label = state("current-page-label", none)
#let css-list = state("css-list", ())
#let js-list = state("js-list", ())
#let additionnal-head-tags = state("additionnal-head-tags", ())

/// Add string `css` to `css-list` if not already present
#let add-css(css) = context {
  css-list.update(x => if css in x { x } else { x + (css,) })
}

/// Add string `js` to `js-list` if not already present
#let add-js(js) = context {
  js-list.update(x => if js in x { x } else { x + (js,) })
}

/// Add additionnal html tag to insert in <head>
#let add-tag-in-head(tag) = context {
  additionnal-head-tags.update(x => if tag in x { x } else { x + (tag, ) })
}

/// Concatenate all css found in css-list at the end of the document
#let get-css(page-label) = context {
  let end-page-label = label(str(page-label) + "-end")
  if css-list.at(end-page-label) != () {
    html.style(css-list.at(end-page-label).join("\n\n"))
  } else {}
}

/// Concatenate all js found in js-list at the end of the document
#let get-js(page-label) = context {
  let end-page-label = label(str(page-label) + "-end")
  if js-list.at(end-page-label) != () {
    html.script(js-list.at(end-page-label).join("\n\n"))
  } else {}
}

#let reset-page-states() = {
  current-page-label.update(x => none)
  css-list.update(x => ())
  js-list.update(x => ())
  additionnal-head-tags.update(x => ())
  reset-pyscript-page-states()
}

// Site wide state

#let state-page-summaries = state("state-page-summaries", ())
