// /src/app/api/partners/route.ts

import { NextRequest, NextResponse } from "next/server";
import { getServerSession } from "next-auth";
import { authOptions } from "@/app/api/auth/authOptions";
import { prisma } from "@/lib/prisma";

export async function POST(request: Request) {
  try {
    const body = await request.json();
    const {
      name,
      partnerType,
      clientId,
      address,
      street,
      streetNumber,
      phone,
      email,
      contactName,
      city,
      country,
      postalCode
    } = body;

    const clientIdInt = parseInt(clientId, 10);
    if (!name || !partnerType || isNaN(clientIdInt)) {
      return NextResponse.json({ message: "Nom, type et client sont requis et valides." }, { status: 400 });
    }

    const clientExists = await prisma.client.findUnique({
      where: { id: clientIdInt }
    });

    if (!clientExists) {
      return NextResponse.json({ message: "Le client spécifié n'existe pas." }, { status: 404 });
    }

    const newPartner = await prisma.partner.create({
      data: {
        name,
        partnerType,
        clientId: clientIdInt,
        address,
        street,
        streetNumber,
        phone,
        email,
        contactName,
        city,
        country,
        postalCode
      }
    });

    return NextResponse.json(newPartner, { status: 201 });
  } catch (error) {
    console.error("Erreur POST /api/partners:", error);
    return NextResponse.json({ error: "Erreur interne du serveur." }, { status: 500 });
  }
}

export async function GET(req: NextRequest) {
  try {
    const session = await getServerSession(authOptions);
    if (!session?.user) {
      return NextResponse.json({ error: "Accès refusé" }, { status: 403 });
    }

    const { searchParams } = new URL(req.url);
    const managerId = searchParams.get('managerId');
    const clientId = searchParams.get('clientId');

    // Construire dynamiquement le whereClause
    const whereClause: any = {};
    if (managerId) {
      whereClause.client = { managerId: parseInt(managerId) };
    }
    if (clientId) {
      whereClause.clientId = parseInt(clientId);
    }

    const partners = await prisma.partner.findMany({
      where: whereClause,
      select: {
        id: true,
        clientId: true,
        name: true,
        email: true,
        phone: true,
        partnerType: true,
        address: true,
        city: true,
        country: true
      },
      orderBy: { name: 'asc' }
    });

    return NextResponse.json(partners);
  } catch (error) {
    console.error('Erreur lors de la récupération des partenaires:', error);
    return NextResponse.json(
      { error: "Erreur lors de la récupération des données" },
      { status: 500 }
    );
  }
}
