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

export async function GET(request: Request) {
  try {
    const { searchParams } = new URL(request.url)
    const employeeId = searchParams.get('employeeId')
    const dept = searchParams.get('dept')
    const status = searchParams.get('status')
    
    console.log('GET /api/leave - employeeId:', employeeId, 'dept:', dept, 'status:', status)
    
    let where: any = {}
    
    if (employeeId) {
      where.employeeId = employeeId
    }
    
    if (dept) {
      where.dept = dept
    }
    
    if (status) {
      where.status = status
    }
    
    const leaveRequests = await prisma.leaveRequest.findMany({
      where,
      orderBy: { submittedOn: 'desc' }
    })
    
    console.log('Found ' + leaveRequests.length + ' leave requests')
    
    return NextResponse.json(leaveRequests)
  } catch (error) {
    console.error('Error fetching leave requests:', error)
    return NextResponse.json(
      { error: 'Failed to fetch leave requests', details: error instanceof Error ? error.message : 'Unknown error' },
      { status: 500 }
    )
  }
}

export async function POST(request: Request) {
  try {
    const data = await request.json()
    
    const leaveRequest = await prisma.leaveRequest.create({
      data: {
        id: data.id || 'LR-' + Date.now() + '-' + Math.random().toString(36).substring(2, 8).toUpperCase(),
        employeeId: data.employeeId,
        employeeName: data.employeeName,
        dept: data.dept,
        position: data.position,
        employeeType: data.employeeType || 'Employee',
        gender: data.gender,
        type: data.type,
        startDate: new Date(data.startDate),
        endDate: new Date(data.endDate),
        days: data.days,
        reason: data.reason,
        status: data.status || 'Pending',
        submittedOn: data.submittedOn ? new Date(data.submittedOn) : new Date(),
        dutyDelegate: data.dutyDelegate,
        hasDocument: data.hasDocument || false,
        hodApprovedBy: data.hodApprovedBy,
        hodApprovedOn: data.hodApprovedOn ? new Date(data.hodApprovedOn) : null,
        hosApprovedBy: data.hosApprovedBy,
        hosApprovedOn: data.hosApprovedOn ? new Date(data.hosApprovedOn) : null,
        hosComment: data.hosComment,
        approvedBy: data.approvedBy,
        approvedOn: data.approvedOn ? new Date(data.approvedOn) : null,
        rejectionReason: data.rejectionReason,
        rejectedBy: data.rejectedBy,
        rejectedStage: data.rejectedStage,
        reviewRequested: data.reviewRequested || false,
        reviewComment: data.reviewComment,
        reviewNewStart: data.reviewNewStart,
        reviewNewEnd: data.reviewNewEnd,
        reviewBy: data.reviewBy,
        reviewDate: data.reviewDate ? new Date(data.reviewDate) : null,
      }
    })
    
    return NextResponse.json(leaveRequest, { status: 201 })
  } catch (error) {
    console.error('Error creating leave request:', error)
    return NextResponse.json(
      { error: 'Failed to create leave request', details: error instanceof Error ? error.message : 'Unknown error' },
      { status: 500 }
    )
  }
}
