import { prisma } from '@/lib/prisma'
import { NextRequest, NextResponse } from 'next/server'

export async function GET(request: NextRequest) {
  try {
    const { searchParams } = new URL(request.url);
    const dept = searchParams.get('dept');
    
    let where: any = { isActive: true };
    if (dept) {
      where.dept = dept;
    }
    
    const emps = await prisma.employee.findMany({
      where,
      orderBy: { fullName: 'asc' },
    })

    const empNumbers = emps.map(e => e.employeeNumber);
    const users = empNumbers.length ? await prisma.user.findMany({ where: { employeeId: { in: empNumbers } }, select: { id: true, username: true, role: true, employeeId: true } }) : [];
    const userMap = new Map(users.map(u => [u.employeeId, u]));

    const employees = emps.map(e => ({ ...e, user: userMap.get(e.employeeNumber) || null }));
    return NextResponse.json(employees)
  } catch (error) {
    console.error('Error fetching employees:', error)
    return NextResponse.json({ error: 'Failed to fetch employees' }, { status: 500 })
  }
}

export async function POST(request: Request) {
  try {
    const body = await request.json()
    const employee = await prisma.employee.create({
      data: {
        employeeNumber: body.employee_number,
        firstName: body.first_name,
        lastName: body.last_name,
        fullName: body.full_name,
        email: body.email,
        phone: body.phone,
        dob: body.dob ? new Date(body.dob) : undefined,
        gender: body.gender,
        employmentType: body.employment_type,
        dept: body.dept,
        position: body.position,
        joinDate: new Date(body.join_date),
        salary: body.salary,
        nationalId: body.national_id,
        kraPin: body.kra_pin,
        isIntern: body.is_intern,
        isActive: true,
      }
    })
    return NextResponse.json(employee)
  } catch (error) {
    console.error('Error creating employee:', error)
    return NextResponse.json({ error: 'Failed to create employee' }, { status: 500 })
  }
}