import { NextResponse } from "next/server"
import { auth } from "@/lib/auth"
import { payrollSchema } from "@/features/payroll/schema"
import { createPayroll, listPayrolls } from "@/features/payroll/service"
import { ZodError } from "zod"

export const runtime = "nodejs"

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

    const { searchParams } = new URL(req.url)
    const month = searchParams.get("month")
    const year = searchParams.get("year")

    const payrolls = await listPayrolls(
      month ? parseInt(month) : undefined,
      year ? parseInt(year) : undefined
    )

    return NextResponse.json(payrolls)
  } catch (error) {
    console.error("Error fetching payrolls:", error)
    return NextResponse.json({ error: "Failed to fetch payrolls" }, { 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 = payrollSchema.parse(body)

    const payroll = await createPayroll(validated)
    return NextResponse.json(payroll)
  } 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 }
      )
    }
    if (error instanceof Error && error.message.includes("already exists")) {
      return NextResponse.json({ error: error.message }, { status: 409 })
    }
    console.error("Error creating payroll:", error)
    return NextResponse.json({ error: "Failed to create payroll" }, { status: 500 })
  }
}
