///|
pub fn recipe_allow_all(agent : String) -> String {
  render(allow_all(agent))
}

///|
pub fn recipe_block_all(agent : String) -> String {
  render(block_all(agent))
}

///|
pub fn recipe_private_public(
  private_prefix : String,
  public_prefix : String,
) -> String {
  render(allow_public_private(private_prefix, public_prefix))
}

///|
pub fn recipe_blog(sitemap : String) -> String {
  render(
    append_sitemap(block_paths("*", ["/admin", "/drafts", "/private"]), sitemap),
  )
}

///|
pub fn recipe_static_site(sitemap : String) -> String {
  let group = group_add_allow(
    group_add_disallow(group_for_agents(["*"]), "/assets/private"),
    "/assets/public",
  )
  render(append_sitemap(robots_from_group(group), sitemap))
}

///|
pub fn recipe_api_docs(sitemap : String) -> String {
  let group = group_add_allow(
    group_add_disallow(group_for_agents(["*"]), "/api/internal"),
    "/api/docs",
  )
  render(append_sitemap(robots_from_group(group), sitemap))
}

///|
pub fn recipe_for_kind(kind : String, sitemap : String) -> String {
  let name = lower_ascii(kind)
  if name == "blog" {
    recipe_blog(sitemap)
  } else if name == "static" {
    recipe_static_site(sitemap)
  } else if name == "api" {
    recipe_api_docs(sitemap)
  } else {
    recipe_allow_all("*")
  }
}

///|
pub fn recipe_names() -> Array[String] {
  ["allow-all", "block-all", "blog", "static", "api"]
}

///|
pub fn recipe_catalog() -> String {
  join_lines([
    "allow-all: no path rules", "block-all: Disallow /", "blog: blocks admin drafts private",
    "static: protects private assets", "api: protects internal API while exposing docs",
  ])
}