local fes = require("fes")
local site = fes.site_builder()

site.title = "Fes Documentation"
site.copyright = fes.std.copyright() .. " " .. fes.std.external("https://git.vxserver.dev/fSD", "fSD")

site:h1("Fes Documentation")
site:note([[
This is the documentation for the Fes
Microframework. This documentation serves as
a starting point and in its current state is
not comprehensive. Furthermore, you should
note that Fes is not production grade or
stable, use at your own caution.
]])

site:muted("Before reading this you should consult the " ..
fes.std.external("https://git.vxserver.dev/fSD/fes", "README"))

local docs = {}

local template = [[
<span class="highlight">%s</span>
<details>
  <summary></summary>
  <span class="highlight">%s</span>
  <br>
  %s
</details>
]]
function docs:func(fn, signature, desc)
	table.insert(self, string.format(template, fn, signature, desc))
	return self
end

docs:func("site_builder", "fes.site_builder() -> site", "returns a site object, a required element for this framework.")
docs:func("custom", "site:custom(content)", "adds a raw string into the site object")
docs:func("h1", "site:h1(content)", "adds a h1 tag to the site object.")
docs:func("h2", "site:h2(content)", "adds a h2 tag to the site object.")
docs:func("h3", "site:h3(content)", "adds a h3 tag to the site object.")
docs:func("h4", "site:h4(content)", "adds a h4 tag to the site object.")
docs:func("h5", "site:h5(content)", "adds a h5 tag to the site object.")
docs:func("h6", "site:h6(content)", "adds a h6 tag to the site object.")
docs:func("p", "site:p(content)", "adds a paragraph tag to the site object.")
docs:func("note", "site:note(content)", "adds a fes note to the site object. A note is a box used for important information or emphasis.")
docs:func("muted", "site:muted(content)", "adds a fes muted block to the site object. A muted block makes text smaller and less noticable, it is useful for small usage notes.")
docs:func("a", "site:a(link, content)", "adds an anchor tag to the site object. By default, if no 'content' is passed is just displays the link")
docs:func("external", "site:external(link, content)", "similarly to 'site:a', it adds an anchor tag to the site object but opens it in a new tab. By default, if no 'content' is passed is just displays the link")
docs:func("ul", "site:ul(items)", "creates an unordered list from passed table, usally 'std.li()'.")
docs:func("ol", "site:ol(items)", "creates an ordered list from passed table, usally 'std.li()'.")
docs:func("li", "site:li(content)", "adds a list entry to the site object")
docs:func("code", "site:code(content)", "adds a code block to the site object.")
docs:func("blockquote", "site:blockquote(content)", "adds a block quote to the site object.")
docs:func("hr", "site:hr()", "adds a horizontal line to the site object.")
docs:func("divider", "site:divider()", "adds a divider to the site object.")
docs:func("img", "site:img(src, alt)", "adds an image to the site object.")
docs:func("table", "site:table(headers, rows)", "adds a table to the site object.")
docs:func("div", "site:div(content, classs)", "adds a custom div to the site object. Custom classes are to be defined in the .css file pointed to by the CUSTOM_CSS variable in Fes.toml")
docs:func("span", "site:span(content, classs)", "adds a custom span to the site object. Custom classes are to be defined in the .css file pointed to by the CUSTOM_CSS variable in Fes.toml")
docs:func("strong", "site:strong(content)", "adds bold text to the site object.")
docs:func("em", "site:em(content)", "adds italicized text to the site object.")
docs:func("br", "site:br()", "adds a break into the document")
docs:func("links", "site:links(link_list)", "adds a formated list of links into the site object.")
docs:func("lead", "site:lead(content)", "adds an instance of the lead class into the site object. This is used in combonation with 'site:note' to create a heading within it.")
docs:func("small", "site:small(content)", "adds a div with class 'small'. The small class changed the size of text within.")
docs:func("highlight", "site:highlight(content)", "adds an instance of the 'highlight' class into the site object. Text with the 'highlight' class will be emphasized")

site:note(table.concat(docs, ""))

return site
