// app/api/enrollments/sync.ts
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
import { getServerSession } from 'next-auth';
import { authOptions } from '@/lib/auth-options';
import { prisma } from '@/lib/prisma';

export async function POST(req: NextRequest) {
  console.log('🔥 [SYNC-ENROLLMENTS] POST endpoint called');
  console.log('🔥 [SYNC-ENROLLMENTS] Request method:', req.method);
  console.log('🔥 [SYNC-ENROLLMENTS] Request URL:', req.url);
  
  try {
    const session = await getServerSession(authOptions);
    console.log('🔥 [SYNC-ENROLLMENTS] Session check:', !!session?.user?.email);
    console.log('🔥 [SYNC-ENROLLMENTS] Session user:', session?.user);
    
    if (!session?.user?.email) {
      console.log('🔥 [SYNC-ENROLLMENTS] No session or email, returning 401');
      return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
    }

    const userEmail = session.user.email;
    console.log('🔥 [SYNC-ENROLLMENTS] About to parse request body...');
    
    const body = await req.json();
    console.log('🔥 [SYNC-ENROLLMENTS] Raw body received:', JSON.stringify(body, null, 2));
    
    const levels: string[] = body?.levels || [];
    console.log('🔥 [SYNC-ENROLLMENTS] Extracted levels:', levels);
    console.log('🔥 [SYNC-ENROLLMENTS] Levels type check - isArray:', Array.isArray(levels));
    console.log('🔥 [SYNC-ENROLLMENTS] Levels length:', levels.length);

    console.log('🔥 [SYNC-ENROLLMENTS] User:', userEmail);
    console.log('🔥 [SYNC-ENROLLMENTS] Received levels:', levels);

    if (!Array.isArray(levels) || levels.length === 0) {
      console.log('🔥 [SYNC-ENROLLMENTS] VALIDATION FAILED!');
      console.log('🔥 [SYNC-ENROLLMENTS] levels isArray:', Array.isArray(levels));
      console.log('🔥 [SYNC-ENROLLMENTS] levels length:', levels?.length);
      console.log('🔥 [SYNC-ENROLLMENTS] levels value:', levels);
      console.log('🔥 [SYNC-ENROLLMENTS] Returning 400 - Levels array required');
      return NextResponse.json(
        { error: 'Levels array required' },
        { status: 400 }
      );
    }

    // Get user
    const user = await prisma.user.findUnique({
      where: { email: userEmail },
    });
    if (!user) {
      console.log('[SYNC-ENROLLMENTS] User not found in database:', userEmail);
      return NextResponse.json({ error: 'User not found' }, { status: 404 });
    }

    console.log('[SYNC-ENROLLMENTS] Found user:', user.id, user.email);

    const createdEnrollments = [];

    // For each course level, find the course and create enrollment
    for (const level of levels) {
      try {
        console.log('[SYNC-ENROLLMENTS] Looking for course with code:', level);
        
        const course = await prisma.course.findUnique({
          where: { code: level },
        });

        if (!course) {
          console.warn(`[SYNC-ENROLLMENTS] Course code not found: ${level}`);
          continue;
        }

        console.log('[SYNC-ENROLLMENTS] Found course:', course.id, course.code, course.title);

        // Check if enrollment already exists
        const existing = await prisma.enrollment.findFirst({
          where: { userId: user.id, courseId: course.id },
        });

        if (existing) {
          console.log('[SYNC-ENROLLMENTS] Enrollment already exists:', existing.id);
        } else {
          const enrollment = await prisma.enrollment.create({
            data: {
              userId: user.id,
              courseId: course.id,
            },
          });
          console.log('[SYNC-ENROLLMENTS] Created new enrollment:', enrollment.id);
          createdEnrollments.push({
            courseCode: level,
            courseId: course.id,
            enrollmentId: enrollment.id,
          });
        }
      } catch (err) {
        console.error(`[SYNC-ENROLLMENTS] Failed to create enrollment for level ${level}:`, err);
      }
    }

    console.log('[SYNC-ENROLLMENTS] Summary - Created enrollments:', createdEnrollments.length);
    console.log('[SYNC-ENROLLMENTS] Details:', createdEnrollments);

    return NextResponse.json(
      {
        message: 'Enrollments synced',
        created: createdEnrollments,
      },
      { status: 200 }
    );
  } catch (err) {
    console.error('🔥 [SYNC-ENROLLMENTS] FATAL ERROR:', err);
    console.error('🔥 [SYNC-ENROLLMENTS] Error stack:', err instanceof Error ? err.stack : 'No stack');
    return NextResponse.json(
      { error: 'Failed to sync enrollments' },
      { status: 500 }
    );
  }
}
