import { NextRequest, NextResponse } from "next/server";
import { getServerSession } from "next-auth";
import { authOptions } from "../../../auth/authOptions";
import { prisma } from "@/lib/prisma";

export async function GET(
  req: NextRequest,
  { params }: { params: { id: string } }
) {
  const session = await getServerSession(authOptions);
  if (!session) {
    return NextResponse.json({ error: "Non autorisé" }, { status: 401 });
  }

  try {
    const partnerId = parseInt(params.id);
    
    // Vérifier que le partenaire existe
    const partner = await prisma.partner.findUnique({
      where: { id: partnerId }
    });

    if (!partner) {
      return NextResponse.json({ error: "Partenaire non trouvé" }, { status: 404 });
    }

    // Récupérer les événements liés au partenaire
    const events = await prisma.event.findMany({
      where: { partnerId },
      include: {
        partner: true,
        calendarEvent: true,
      },
      orderBy: { eventDate: 'desc' }
    });

    return NextResponse.json(events);
  } catch (error) {
    console.error('Erreur lors de la récupération des événements du partenaire:', error);
    return NextResponse.json(
      { error: "Erreur serveur" },
      { status: 500 }
    );
  }
}

export async function POST(
  req: NextRequest,
  { params }: { params: { id: string } }
) {
  console.log('🔍 Partner Events POST API called');
  const session = await getServerSession(authOptions);
  console.log('🔍 Session in partner events API:', session ? `User: ${session.user?.email}, Role: ${session.user?.role}` : 'No session');
  
  if (!session || (session.user.role !== "MANAGER" && session.user.role !== "ADMIN")) {
    console.log('❌ Unauthorized access to partner events API');
    return NextResponse.json({ error: "Non autorisé" }, { status: 401 });
  }

  try {
    const partnerId = parseInt(params.id);
    console.log('📝 Partner ID:', partnerId);
    
    // Vérifier que le partenaire existe
    const partner = await prisma.partner.findUnique({
      where: { id: partnerId }
    });

    if (!partner) {
      console.log('❌ Partner not found:', partnerId);
      return NextResponse.json({ error: "Partenaire non trouvé" }, { status: 404 });
    }

    const data = await req.json();
    console.log('📝 Received event data:', JSON.stringify(data, null, 2));
    
    // Normalisation des données
    const parseOptionalInt = (val: any) => {
      const num = Number(val);
      return isNaN(num) || val === null || val === undefined || val === '' ? undefined : num;
    };

    const parseOptionalDate = (val: any) => {
      if (!val) return undefined;
      const date = new Date(val);
      return isNaN(date.getTime()) ? undefined : date;
    };

    const payload: any = {
      partnerId: partnerId,
      title: data.title || data.description || 'Événement partenaire',
      description: data.description || data.details || '',
      status: data.status || 'TODO',
      eventDate: parseOptionalDate(data.eventDate) || new Date(),
      dueDate: parseOptionalDate(data.dueDate),
      actionToDo: data.actionToDo || null,
      remarks: data.remarks || null,
      fileUrl: data.fileUrl || null,
    };

    console.log('🔧 Processed payload:', JSON.stringify(payload, null, 2));

    // Validation des champs requis
    if (!payload.title) {
      console.log('❌ Missing title');
      return NextResponse.json({ error: "Titre requis" }, { status: 400 });
    }

    console.log('✅ Creating event with payload:', JSON.stringify(payload, null, 2));
    const event = await prisma.event.create({
      data: payload,
      include: {
        partner: true,
        calendarEvent: true,
      }
    });

    console.log('✅ Event created successfully:', event.id);
    return NextResponse.json(event, { status: 201 });
  } catch (error: any) {
    console.error('❌ Error creating partner event:', error?.message || error);
    console.error('❌ Full error:', error);
    return NextResponse.json({ 
      error: 'Erreur serveur lors de la création de l\'événement',
      details: error?.message || 'Unknown error'
    }, { status: 500 });
  }
} 