import { NextRequest, NextResponse } from 'next/server';
import { supabaseAdmin, logSignEvent } from '@/lib/odentas-sign/supabase';

/**
 * POST /api/odentas-sign/requests/[id]/cancel
 * 
 * Annule une demande de signature
 */
export async function POST(
  request: NextRequest,
  { params }: { params: { id: string } }
) {
  try {
    const requestId = params.id;
    const body = await request.json();
    const { reason } = body;
    
    // Récupérer la demande
    const { data: signRequest, error: requestError } = await supabaseAdmin
      .from('sign_requests')
      .select('*')
      .eq('id', requestId)
      .single();
    
    if (requestError || !signRequest) {
      return NextResponse.json(
        { error: 'Demande introuvable' },
        { status: 404 }
      );
    }
    
    // Vérifier qu'elle n'est pas déjà complétée
    if (signRequest.status === 'completed') {
      return NextResponse.json(
        { error: 'Impossible d\'annuler une demande déjà complétée' },
        { status: 400 }
      );
    }
    
    // Vérifier qu'elle n'est pas déjà annulée
    if (signRequest.status === 'cancelled') {
      return NextResponse.json(
        { error: 'Cette demande est déjà annulée' },
        { status: 400 }
      );
    }
    
    // Mettre à jour le statut
    const { error: updateError } = await supabaseAdmin
      .from('sign_requests')
      .update({ status: 'cancelled' })
      .eq('id', requestId);
    
    if (updateError) {
      console.error('[CANCEL] Erreur mise à jour:', updateError);
      return NextResponse.json(
        { error: 'Erreur lors de l\'annulation' },
        { status: 500 }
      );
    }
    
    // Logger l'événement
    await logSignEvent({
      requestId: signRequest.id,
      event: 'request_cancelled',
      ip: request.headers.get('x-forwarded-for') || request.headers.get('x-real-ip') || undefined,
      userAgent: request.headers.get('user-agent') || undefined,
      metadata: {
        reason: reason || 'Non spécifié',
      },
    });
    
    console.log(`[CANCEL] ✅ Demande annulée: ${signRequest.ref}`);
    
    return NextResponse.json({
      success: true,
      message: 'Demande annulée avec succès',
      request: {
        id: signRequest.id,
        ref: signRequest.ref,
        status: 'cancelled',
      },
    });
    
  } catch (error) {
    console.error('[CANCEL] Erreur:', error);
    return NextResponse.json(
      { error: 'Erreur serveur', details: error instanceof Error ? error.message : String(error) },
      { status: 500 }
    );
  }
}
