import { Hono } from 'hono'
import {
  saveAsTemplateSchema,
  saveProjectAsTemplate,
} from '@zync/db/queries'
import type { AppEnv } from '../../types'
import { requirePermission } from '../../middleware/guards'

export const projectSaveAsTemplateRoute = new Hono<AppEnv>()

projectSaveAsTemplateRoute.post('/:id/save-as-template', requirePermission('projects:write'), async (c) => {
  const session = c.get('session')
  if (!session || session.type !== 'user' || !session.tid) {
    return c.json({ error: 'Unauthorized' }, 401)
  }

  const body = await c.req.json().catch(() => null)
  const parsed = saveAsTemplateSchema.safeParse(body)
  if (!parsed.success) {
    return c.json({ error: 'Invalid request', issues: parsed.error.issues }, 400)
  }

  const result = await saveProjectAsTemplate(
    c.get('db'),
    session.tid,
    c.req.param('id'),
    parsed.data,
    session.sub,
  )
  return c.json(result, 201)
})
