﻿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');
    
    console.log('GET /api/training/enrollments - employeeId:', employeeId);
    
    let where: any = {};
    if (employeeId) {
      where.employeeId = employeeId;
    }
    
    // Remove the include since it might not exist
    const enrollments = await prisma.trainingEnrollment.findMany({
      where
    });
    
    console.log('Found enrollments:', enrollments.length);
    
    return NextResponse.json(enrollments);
  } catch (error) {
    console.error('Error fetching training enrollments:', error);
    return NextResponse.json({ error: 'Failed to fetch training enrollments', details: error instanceof Error ? error.message : 'Unknown error' }, { status: 500 });
  }
}

export async function POST(request: NextRequest) {
  try {
    const body = await request.json();
    
    if (!body.programId || !body.employeeId) {
      return NextResponse.json({ error: 'Missing programId or employeeId' }, { status: 400 });
    }
    
    // Check if enrollment already exists
    const existing = await prisma.trainingEnrollment.findUnique({
      where: {
        programId_employeeId: {
          programId: body.programId,
          employeeId: body.employeeId
        }
      }
    });
    
    let enrollment;
    if (existing) {
      enrollment = await prisma.trainingEnrollment.update({
        where: {
          programId_employeeId: {
            programId: body.programId,
            employeeId: body.employeeId
          }
        },
        data: {
          completionStatus: body.completionStatus,
          completionDate: body.completionDate ? new Date(body.completionDate) : null,
          score: body.score,
        }
      });
    } else {
      enrollment = await prisma.trainingEnrollment.create({
        data: {
          programId: body.programId,
          employeeId: body.employeeId,
          enrolledDate: new Date(),
          completionStatus: body.completionStatus || 'Enrolled',
        }
      });
      
      // Update program enrolled count
      try {
        await prisma.trainingProgram.update({
          where: { id: body.programId },
          data: { enrolled: { increment: 1 } }
        });
      } catch (err) {
        console.log('Could not update program count:', err);
      }
    }
    
    return NextResponse.json(enrollment, { status: 201 });
  } catch (error) {
    console.error('Error creating training enrollment:', error);
    return NextResponse.json({ error: 'Failed to create training enrollment', details: error instanceof Error ? error.message : 'Unknown error' }, { status: 500 });
  }
}
