import { prisma } from '@/lib/prisma'
import { NextResponse } from 'next/server'

export async function GET() {
  try {
    const depts = await prisma.department.findMany({
      where: { isActive: true },
      orderBy: { name: 'asc' },
    })

    const hodIds = Array.from(new Set(depts.map(d => d.hodId).filter(Boolean) as string[]));
    const hods = hodIds.length ? await prisma.user.findMany({ where: { id: { in: hodIds } }, select: { id: true, name: true, username: true } }) : [];
    const hodMap = new Map(hods.map(h => [h.id, h]));

    const departments = depts.map(d => ({
      ...d,
      hod: d.hodId ? hodMap.get(d.hodId) || null : null,
    }));

    return NextResponse.json(departments)
  } catch (error) {
    console.error('Error fetching departments:', error)
    return NextResponse.json({ error: 'Failed to fetch departments' }, { status: 500 })
  }
}

export async function POST(request: Request) {
  try {
    const body = await request.json()
    const department = await prisma.department.create({
      data: {
        name: body.name,
        code: body.code,
        description: body.description,
        isActive: true,
      }
    })
    return NextResponse.json(department)
  } catch (error) {
    console.error('Error creating department:', error)
    return NextResponse.json({ error: 'Failed to create department' }, { status: 500 })
  }
}