import { NextResponse } from "next/server"
import { requireAuth } from "@/lib/shared/middleware/auth.middleware"
import { withErrorHandling } from "@/lib/shared/middleware/errorHandler.middleware"
import {
  deleteUserById,
  getUser,
  updateUserFromRequest,
} from "@/lib/controllers/userController"

export const runtime = "nodejs"

export const GET = withErrorHandling(
  async (_req: Request, { params }: { params: Promise<{ id: string }> }) => {
    const unauthorized = await requireAuth()
    if (unauthorized) return unauthorized

    const { id } = await params
    const user = await getUser(id)
    if (!user) {
      return NextResponse.json({ error: "User not found" }, { status: 404 })
    }
    return NextResponse.json(user)
  }
)

export const PUT = withErrorHandling(
  async (req: Request, { params }: { params: Promise<{ id: string }> }) => {
    const unauthorized = await requireAuth()
    if (unauthorized) return unauthorized

    const { id } = await params
    const user = await updateUserFromRequest(req, id)
    return NextResponse.json(user)
  }
)

export const DELETE = withErrorHandling(
  async (_req: Request, { params }: { params: Promise<{ id: string }> }) => {
    const unauthorized = await requireAuth()
    if (unauthorized) return unauthorized

    const { id } = await params
    await deleteUserById(id)
    return NextResponse.json({ success: true })
  }
)
