import { NextResponse } from 'next/server';
import connectDB from '@/lib/mongodb';
import { Supplier } from '@/models';

/**
 * PUT /api/suppliers/[id]
 * Met à jour un fournisseur
 */
export async function PUT(
  request: Request,
  context: { params: Promise<{ id: string }> }
) {
  try {
    await connectDB();

    const { id } = await context.params;
    const body = await request.json();
    const { 
      supplierName, 
      category, 
      contactPerson, 
      phone, 
      email, 
      address, 
      city, 
      postalCode, 
      taxId, 
      paymentTerms,
      active 
    } = body;

    const supplier = await Supplier.findById(id);
    if (!supplier) {
      return NextResponse.json(
        {
          success: false,
          error: 'Fournisseur introuvable',
        },
        { status: 404 }
      );
    }

    // Mise à jour
    if (supplierName) supplier.supplierName = supplierName;
    if (category) supplier.category = category;
    if (contactPerson !== undefined) supplier.contactPerson = contactPerson;
    if (phone !== undefined) supplier.phone = phone;
    if (email !== undefined) supplier.email = email;
    if (address !== undefined) supplier.address = address;
    if (city !== undefined) supplier.city = city;
    if (postalCode !== undefined) supplier.postalCode = postalCode;
    if (taxId !== undefined) supplier.taxId = taxId;
    if (paymentTerms !== undefined) supplier.paymentTerms = paymentTerms;
    if (active !== undefined) supplier.active = active;

    await supplier.save();

    return NextResponse.json({
      success: true,
      message: 'Fournisseur mis à jour avec succès',
      data: supplier,
    });
  } catch (error) {
    console.error('Erreur API Suppliers PUT:', error);
    return NextResponse.json(
      {
        success: false,
        error: error instanceof Error ? error.message : 'Erreur lors de la mise à jour',
      },
      { status: 500 }
    );
  }
}

/**
 * DELETE /api/suppliers/[id]
 * Supprime (désactive) un fournisseur
 */
export async function DELETE(
  request: Request,
  context: { params: Promise<{ id: string }> }
) {
  try {
    await connectDB();

    const { id } = await context.params;

    const supplier = await Supplier.findById(id);
    if (!supplier) {
      return NextResponse.json(
        {
          success: false,
          error: 'Fournisseur introuvable',
        },
        { status: 404 }
      );
    }

    // Soft delete (désactivation)
    supplier.active = false;
    await supplier.save();

    return NextResponse.json({
      success: true,
      message: 'Fournisseur désactivé avec succès',
    });
  } catch (error) {
    console.error('Erreur API Suppliers DELETE:', error);
    return NextResponse.json(
      {
        success: false,
        error: error instanceof Error ? error.message : 'Erreur lors de la suppression',
      },
      { status: 500 }
    );
  }
}
