// Public · Wiki — the published wiki: the page list, categories, tags and a
// single page by slug. Read-only counterpart of admin/wiki.router.js.
//
// Mounted at /api/v1/public/wiki by public/index.js. No group gate; `siteMode`
// is applied per route.
//
// Declaration order is load-bearing: `/categories` and `/tags` are literal paths
// and MUST stay ahead of `/:slug`, or GET /public/wiki/categories dispatches as a
// wiki page whose slug is "categories". routes.manifest.json sorts its entries
// and therefore cannot catch a reordering — the same trap admin/wiki.router.js
// carries (see docs/website/API_V2_PLAN.md § PR 3).

const express = require('express')

const ctrl = require('./public.controller')
const siteMode = require('../../../middleware/siteMode')

const wikiRouter = express.Router()

wikiRouter.get(
  '/',
  // #swagger.tags = ['Public']
  // #swagger.summary = 'List published wiki pages'
  /* #swagger.responses[200] = { description: 'Published wiki pages', content: { "application/json": { schema: { type: "array", items: { $ref: "#/components/schemas/WikiPage" } } } } } */
  siteMode,
  ctrl.getWikiList,
)
// Static paths must precede the :slug route so they aren't captured as a slug.
wikiRouter.get(
  '/categories',
  // #swagger.tags = ['Public']
  // #swagger.summary = 'List wiki categories'
  /* #swagger.responses[200] = { description: 'Wiki categories', content: { "application/json": { schema: { type: "array", items: { $ref: "#/components/schemas/WikiCategory" } } } } } */
  siteMode,
  ctrl.getWikiCategories,
)
wikiRouter.get(
  '/tags',
  // #swagger.tags = ['Public']
  // #swagger.summary = 'List wiki tags'
  /* #swagger.responses[200] = { description: 'Wiki tags', content: { "application/json": { schema: { type: "array", items: { type: "string" } } } } } */
  siteMode,
  ctrl.getWikiTags,
)
wikiRouter.get(
  '/:slug',
  // #swagger.tags = ['Public']
  // #swagger.summary = 'Get a single published wiki page'
  // #swagger.parameters['slug'] = { in: 'path', required: true, schema: { type: 'string' }, description: 'Wiki page slug.' }
  /* #swagger.responses[200] = { description: 'The wiki page', content: { "application/json": { schema: { $ref: "#/components/schemas/WikiPage" } } } } */
  /* #swagger.responses[404] = { description: 'Not found', content: { "application/json": { schema: { $ref: "#/components/schemas/Error" } } } } */
  siteMode,
  ctrl.getWikiPage,
)

module.exports = wikiRouter
