import { NextRequest, NextResponse } from 'next/server';
import { getSupabaseAdmin } from '@/lib/supabase';

// GET: list mappings
export async function GET(req: NextRequest) {
  try {
    const { searchParams } = new URL(req.url);
    const supplier = searchParams.get('supplier');

    const supabase = getSupabaseAdmin();

    let query = supabase.from('product_mappings').select('*');
    if (supplier) query = query.eq('supplier', supplier);
    query = query.order('created_at', { ascending: false });

    const { data, error } = await query;
    if (error) return NextResponse.json({ error: error.message }, { status: 500 });

    return NextResponse.json(data);
  } catch (error) {
    const message = error instanceof Error ? error.message : 'Erreur inconnue';
    return NextResponse.json({ error: message }, { status: 500 });
  }
}

// PUT: validate / update a mapping
export async function PUT(req: NextRequest) {
  try {
    const body = await req.json();
    const { id, matched_product_name, matched_product_id, confidence, validated } = body;

    if (!id) return NextResponse.json({ error: 'id requis' }, { status: 400 });

    const supabase = getSupabaseAdmin();

    const updates: Record<string, unknown> = {};
    if (matched_product_name !== undefined) updates.matched_product_name = matched_product_name;
    if (matched_product_id !== undefined) updates.matched_product_id = matched_product_id;
    if (confidence !== undefined) updates.confidence = confidence;
    if (validated !== undefined) updates.validated = validated;

    const { data, error } = await supabase
      .from('product_mappings')
      .update(updates)
      .eq('id', id)
      .select()
      .single();

    if (error) return NextResponse.json({ error: error.message }, { status: 500 });

    return NextResponse.json(data);
  } catch (error) {
    const message = error instanceof Error ? error.message : 'Erreur inconnue';
    return NextResponse.json({ error: message }, { status: 500 });
  }
}

// DELETE
export async function DELETE(req: NextRequest) {
  try {
    const { searchParams } = new URL(req.url);
    const id = searchParams.get('id');
    if (!id) return NextResponse.json({ error: 'id requis' }, { status: 400 });

    const supabase = getSupabaseAdmin();
    const { error } = await supabase.from('product_mappings').delete().eq('id', id);
    if (error) return NextResponse.json({ error: error.message }, { status: 500 });

    return NextResponse.json({ success: true });
  } catch (error) {
    const message = error instanceof Error ? error.message : 'Erreur inconnue';
    return NextResponse.json({ error: message }, { status: 500 });
  }
}
