import { NextResponse } from 'next/server'
import { marketplaceRepo } from '@/lib/database/repositories/marketplace.repo'
import { getTemplatePath } from '@/lib/marketplace-fs'
import { isAuthError, requireUser } from '@/lib/auth/session'
import crypto from 'crypto'
import fs from 'fs'

// GET /api/marketplace — list templates owned by the current user
export async function GET() {
  let user
  try { user = await requireUser() } catch (err) { if (isAuthError(err)) return err; throw err }

  const rows = marketplaceRepo.listByOwner(user.id)

  return NextResponse.json(rows)
}

// POST /api/marketplace — create a new empty template owned by the current user
export async function POST(req: Request) {
  let user
  try { user = await requireUser() } catch (err) { if (isAuthError(err)) return err; throw err }

  let body: Record<string, unknown>
  try { body = await req.json() } catch { return NextResponse.json({ error: 'Invalid JSON' }, { status: 400 }) }

  const name = body.name as string | undefined
  if (!name || typeof name !== 'string') {
    return NextResponse.json({ error: 'name is required' }, { status: 400 })
  }

  const id = crypto.randomUUID()

  // Create the template directory on disk
  const templateDir = getTemplatePath(id)
  fs.mkdirSync(templateDir, { recursive: true })

  // Insert into database
  const created = marketplaceRepo.create({ id, name, ownerUserId: user.id })
  return NextResponse.json(created, { status: 201 })
}
