import * as z from 'zod'
import WikiArticle from '../../../models/wikiArticle.js'
import { connectDB } from '../../../utils/mongoose.js'

const wikiUpdateSchema = z.object({
  tags: z.array(z.string()).optional(),
  hidden: z.boolean().optional()
})

export default defineEventHandler(async (event) => {
  await requireAdmin(event)

  const body = await validateBody(event, wikiUpdateSchema)
  const id = getRouterParam(event, 'id')

  if (body.tags === undefined && body.hidden === undefined) {
    throw createError({ statusCode: 400, statusMessage: 'Nothing to update' })
  }

  await connectDB()

  const update = {}
  if (body.tags !== undefined) {
    await validateTagSlugs(body.tags)
    update.tags = body.tags
  }
  if (body.hidden !== undefined) {
    update.hidden = body.hidden
  }

  const article = await WikiArticle.findByIdAndUpdate(
    id,
    update,
    { new: true }
  )

  if (!article) {
    throw createError({ statusCode: 404, statusMessage: 'Article not found' })
  }

  return article
})
