import { NextRequest, NextResponse } from "next/server"
import { auth }                      from "@/lib/auth"
import {
  getAttendanceById,
  updateAttendance,
  deleteAttendance,
} from "@/features/attendance/service"
import { attendanceSchema } from "@/features/attendance/schema"

export const runtime = "nodejs"

export async function GET(_req: NextRequest, { params }: { params: Promise<{ id: string }> }) {
  try {
    const session = await auth()
    if (!session) return NextResponse.json({ error: "Unauthorized" }, { status: 401 })

    const { id } = await params
    const record = await getAttendanceById(id)
    if (!record) return NextResponse.json({ error: "Not found" }, { status: 404 })
    return NextResponse.json(record)
  } catch (err: unknown) {
    const msg = err instanceof Error ? err.message : "Failed to fetch record"
    return NextResponse.json({ error: msg }, { status: 500 })
  }
}

export async function PUT(req: NextRequest, { params }: { params: Promise<{ id: string }> }) {
  try {
    const session = await auth()
    if (!session) return NextResponse.json({ error: "Unauthorized" }, { status: 401 })

    const { id } = await params
    const body   = await req.json()
    const parsed = attendanceSchema.safeParse(body)

    if (!parsed.success) {
      return NextResponse.json(
        { error: "Validation error", details: parsed.error.errors },
        { status: 400 }
      )
    }

    const record = await updateAttendance(id, parsed.data, session.user?.id)
    return NextResponse.json(record)
  } catch (err: unknown) {
    const msg = err instanceof Error ? err.message : "Failed to update attendance"
    return NextResponse.json({ error: msg }, { status: 500 })
  }
}

export async function DELETE(_req: NextRequest, { params }: { params: Promise<{ id: string }> }) {
  try {
    const session = await auth()
    if (!session) return NextResponse.json({ error: "Unauthorized" }, { status: 401 })

    const { id } = await params
    await deleteAttendance(id)
    return NextResponse.json({ success: true })
  } catch (err: unknown) {
    const msg = err instanceof Error ? err.message : "Failed to delete attendance"
    return NextResponse.json({ error: msg }, { status: 500 })
  }
}