﻿import { NextRequest, NextResponse } from 'next/server';
import { prisma } from '@/lib/prisma';

export async function GET(request: NextRequest) {
  try {
    const { searchParams } = new URL(request.url);
    const employeeId = searchParams.get('employeeId');
    
    let where: any = {};
    if (employeeId) {
      where.employeeId = employeeId;
    }
    
    const pips = await prisma.performanceImprovementPlan.findMany({
      where,
      orderBy: { createdAt: 'desc' }
    });
    
    // Get employee details for each PIP
    const employeeIds = pips.map(p => p.employeeId).filter(Boolean);
    const employees = await prisma.employee.findMany({
      where: { employeeNumber: { in: employeeIds } },
      select: { employeeNumber: true, fullName: true, dept: true, directSupervisor: true }
    });
    
    const employeeMap = new Map();
    employees.forEach(emp => {
      employeeMap.set(emp.employeeNumber, emp);
    });
    
    // Format PIPs with all required fields
    const formattedPips = pips.map(pip => {
      const employee = employeeMap.get(pip.employeeId);
      
      return {
        id: pip.id,
        employeeId: pip.employeeId,
        employeeName: employee?.fullName || '',
        dept: employee?.dept || '',
        triggerRating: pip.triggerRating,
        appraisalPeriod: pip.appraisalPeriod,
        startDate: pip.startDate.toISOString().split('T')[0],
        endDate: pip.endDate.toISOString().split('T')[0],
        duration: pip.duration,
        improvementAreas: JSON.parse(pip.improvementAreas || '[]'),
        actionPlan: pip.actionPlan,
        successMetrics: pip.successMetrics,
        status: pip.status,
        hod: pip.supervisor || employee?.directSupervisor || 'HOD',
        checkIns: [],
        aiGenerated: false
      };
    });
    
    return NextResponse.json(formattedPips);
  } catch (error) {
    console.error('Error fetching PIPs:', error);
    return NextResponse.json({ error: 'Failed to fetch PIPs' }, { status: 500 });
  }
}

export async function POST(request: NextRequest) {
  try {
    const body = await request.json();
    
    let employeeName = '';
    let dept = '';
    let supervisor = body.supervisor;
    
    if (body.employeeId) {
      const employee = await prisma.employee.findFirst({
        where: { employeeNumber: body.employeeId },
        select: { fullName: true, dept: true, directSupervisor: true }
      });
      if (employee) {
        employeeName = employee.fullName;
        dept = employee.dept;
        if (!supervisor) {
          supervisor = employee.directSupervisor || 'HOD';
        }
      }
    }
    
    const pip = await prisma.performanceImprovementPlan.create({
      data: {
        employeeId: body.employeeId,
        triggerRating: body.triggerRating || 2.5,
        appraisalPeriod: body.appraisalPeriod,
        startDate: new Date(body.startDate),
        endDate: new Date(body.endDate),
        duration: body.duration,
        improvementAreas: JSON.stringify(body.improvementAreas || []),
        actionPlan: body.actionPlan,
        successMetrics: body.successMetrics,
        status: body.status || 'Active',
        supervisor: supervisor,
      }
    });
    
    return NextResponse.json({
      id: pip.id,
      employeeId: pip.employeeId,
      employeeName: employeeName,
      dept: dept,
      triggerRating: pip.triggerRating,
      appraisalPeriod: pip.appraisalPeriod,
      startDate: pip.startDate.toISOString().split('T')[0],
      endDate: pip.endDate.toISOString().split('T')[0],
      duration: pip.duration,
      improvementAreas: JSON.parse(pip.improvementAreas || '[]'),
      actionPlan: pip.actionPlan,
      successMetrics: pip.successMetrics,
      status: pip.status,
      hod: supervisor,
      checkIns: [],
      aiGenerated: false
    }, { status: 201 });
  } catch (error) {
    console.error('Error creating PIP:', error);
    return NextResponse.json({ error: 'Failed to create PIP' }, { status: 500 });
  }
}