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

export const projectFromTemplateRoute = new Hono<AppEnv>()

projectFromTemplateRoute.post('/from-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 = instantiateTemplateSchema.safeParse(body)
  if (!parsed.success) {
    return c.json({ error: 'Invalid request', issues: parsed.error.issues }, 400)
  }

  try {
    const result = await instantiateTemplate(c.get('db'), session.tid, parsed.data, session.sub)
    return c.json(result, 201)
  } catch (error) {
    const message = error instanceof Error ? error.message : 'Failed to create project from template'
    return c.json({ error: message }, 422)
  }
})
