import { NextRequest, NextResponse } from "next/server"
import { auth } from "@/lib/auth"
import { leaveRequestSchema } from "@/features/leave/schema"
import { createLeaveRequest, listLeaveRequests, listLeaveRequestsForAttendance } from "@/features/leave/service"
import { ZodError } from "zod"

export const runtime = "nodejs"

export async function GET(req: NextRequest) {
  try {
    const session = await auth()
    if (!session) {
      return NextResponse.json({ error: "Unauthorized" }, { status: 401 })
    }

    const { searchParams } = new URL(req.url)
    const dateFrom = searchParams.get("dateFrom") || undefined
    const dateTo   = searchParams.get("dateTo")   || undefined
    const status   = searchParams.get("status")   || undefined

    // if filters are passed (from attendance register), use the filtered function
    if (dateFrom || dateTo || status) {
      const requests = await listLeaveRequestsForAttendance({ dateFrom, dateTo, status })
      return NextResponse.json(requests)
    }

    // default — return full list for the leave page
    const requests = await listLeaveRequests(session.user.id)
    return NextResponse.json(requests)
  } catch (error) {
    console.error("Error fetching leave requests:", error)
    return NextResponse.json({ error: "Failed to fetch leave requests" }, { status: 500 })
  }
}

export async function POST(req: Request) {
  try {
    const session = await auth()
    if (!session) {
      return NextResponse.json({ error: "Unauthorized" }, { status: 401 })
    }

    const body = await req.json()
    const validated = leaveRequestSchema.parse(body)

    const request = await createLeaveRequest(validated)
    return NextResponse.json(request, { status: 201 })
  } catch (error) {
    if (error instanceof ZodError) {
      return NextResponse.json(
        { error: "Validation failed", details: error.errors.map((e) => ({ path: e.path, message: e.message })) },
        { status: 400 }
      )
    }
    console.error("Error creating leave request:", error)
    return NextResponse.json({ error: "Failed to create leave request" }, { status: 500 })
  }
}