import { NextRequest, 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 fs from 'fs'

// PATCH /api/marketplace/[id] — rename template (owner only)
export async function PATCH(req: NextRequest, { params }: { params: Promise<{ id: string }> }) {
  let user
  try { user = await requireUser() } catch (err) { if (isAuthError(err)) return err; throw err }

  const { id } = await params

  const existing = marketplaceRepo.findByIdAndOwner(id, user.id)
  if (!existing) return NextResponse.json({ error: 'Template not found' }, { status: 404 })

  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 updated = marketplaceRepo.rename(id, user.id, name)
  return NextResponse.json(updated)
}

// DELETE /api/marketplace/[id] — remove template (owner only)
export async function DELETE(_req: NextRequest, { params }: { params: Promise<{ id: string }> }) {
  let user
  try { user = await requireUser() } catch (err) { if (isAuthError(err)) return err; throw err }

  const { id } = await params

  const existing = marketplaceRepo.findByIdAndOwner(id, user.id)
  if (!existing) return NextResponse.json({ error: 'Template not found' }, { status: 404 })

  // Remove template directory from disk
  const templateDir = getTemplatePath(id)
  if (fs.existsSync(templateDir)) {
    fs.rmSync(templateDir, { recursive: true, force: true })
  }

  // Remove from database
  marketplaceRepo.deleteByIdAndOwner(id, user.id)
  return NextResponse.json({ ok: true })
}
