import { NextRequest, NextResponse } from 'next/server';
import { createSbServiceRole } from '@/lib/supabaseServer';

/**
 * POST /api/signature-salarie/verify-birthdate
 * 
 * Vérifie la date de naissance d'un salarié avant de lui permettre d'accéder à la signature
 * 
 * Body: {
 *   docuseal_id: string,
 *   birthdate: string (format YYYY-MM-DD)
 * }
 */
export async function POST(request: NextRequest) {
  console.log('=== API Vérification Date de Naissance Salarié ===');
  console.log('Request URL:', request.url);
  console.log('Request method:', request.method);
  
  try {
    console.log('Parsing request body...');
    const body = await request.json();
    console.log('Body reçu:', JSON.stringify(body, null, 2));
    
    const { docuseal_id, birthdate } = body;

    // Validation des paramètres
    if (!docuseal_id || !birthdate) {
      console.error('Paramètres manquants:', { docuseal_id, birthdate });
      return NextResponse.json(
        { error: 'Paramètres manquants', verified: false },
        { status: 400 }
      );
    }

    console.log('Vérification pour docuseal_id (slug):', docuseal_id);
    console.log('Date de naissance fournie:', birthdate);

    // Créer le client Supabase avec service role
    const supabase = createSbServiceRole();

    // ÉTAPE 1: Chercher d'abord dans les CONTRATS
    console.log('🔍 Recherche dans cddu_contracts...');
    
    const { data: contract, error: contractError } = await supabase
      .from('cddu_contracts')
      .select('id, employee_id, contract_number, employee_docuseal_slug')
      .eq('employee_docuseal_slug', docuseal_id)
      .maybeSingle();

    // ÉTAPE 2: Si pas trouvé dans contrats, chercher dans les AVENANTS
    let avenant = null;
    let employeeId = null;

    if (contract) {
      console.log('✅ Contrat trouvé:', {
        id: contract.id,
        employee_id: contract.employee_id,
        contract_number: contract.contract_number
      });
      employeeId = contract.employee_id;
    } else {
      console.log('🔍 Pas trouvé dans contrats, recherche dans avenants...');
      const { data: avenantData, error: avenantError } = await supabase
        .from('avenants')
        .select(`
          id,
          numero_avenant,
          employee_docuseal_slug,
          cddu_contracts!inner (
            employee_id,
            contract_number
          )
        `)
        .eq('employee_docuseal_slug', docuseal_id)
        .maybeSingle();

      if (avenantError) {
        console.error('❌ Erreur recherche avenant:', avenantError);
      } else if (avenantData) {
        console.log('✅ Avenant trouvé:', avenantData.numero_avenant);
        avenant = avenantData;
        // cddu_contracts devient un objet unique avec !inner
        const contractData = avenantData.cddu_contracts as any;
        employeeId = contractData?.employee_id;
      }
    }

    // ÉTAPE 3: Si rien trouvé dans les deux tables
    if (!contract && !avenant) {
      console.error('❌ Aucun document trouvé avec employee_docuseal_slug:', docuseal_id);
      return NextResponse.json(
        { error: 'Document introuvable', verified: false },
        { status: 404 }
      );
    }

    if (!employeeId) {
      console.error('❌ employee_id non trouvé');
      return NextResponse.json(
        { error: 'Erreur de récupération du salarié', verified: false },
        { status: 500 }
      );
    }

    // Récupérer les infos du salarié depuis la table salaries
    const { data: salarie, error: salarieError } = await supabase
      .from('salaries')
      .select('date_naissance, prenom, nom, adresse_mail')
      .eq('id', employeeId)
      .maybeSingle();

    if (salarieError) {
      console.error('Erreur lors de la récupération du salarié:', salarieError);
      return NextResponse.json(
        { error: 'Erreur lors de la vérification', verified: false },
        { status: 500 }
      );
    }

    if (!salarie) {
      console.error('Salarié introuvable pour employee_id:', employeeId);
      return NextResponse.json(
        { error: 'Salarié introuvable', verified: false },
        { status: 404 }
      );
    }

    if (!salarie.date_naissance) {
      console.warn('Date de naissance non renseignée pour le salarié');
      // Si pas de date de naissance en base, on accepte quand même (pour ne pas bloquer)
      return NextResponse.json({
        verified: true,
        message: 'Vérification acceptée (date de naissance non renseignée)'
      });
    }

    console.log('Salarié trouvé:', {
      prenom: salarie.prenom,
      nom: salarie.nom,
      date_naissance: salarie.date_naissance
    });

    // Comparer les dates de naissance
    // Normaliser les dates pour la comparaison (format YYYY-MM-DD)
    const dbBirthdate = new Date(salarie.date_naissance).toISOString().split('T')[0];
    const inputBirthdate = new Date(birthdate).toISOString().split('T')[0];

    console.log('Comparaison dates:', {
      db: dbBirthdate,
      input: inputBirthdate,
      match: dbBirthdate === inputBirthdate
    });

    if (dbBirthdate === inputBirthdate) {
      console.log('Date de naissance vérifiée avec succès');
      return NextResponse.json({
        verified: true,
        message: 'Date de naissance vérifiée'
      });
    } else {
      console.log('Date de naissance incorrecte');
      return NextResponse.json(
        { 
          error: 'Date de naissance incorrecte', 
          verified: false 
        },
        { status: 401 }
      );
    }

  } catch (error) {
    console.error('Erreur lors de la vérification de la date de naissance:', error);
    console.error('Type erreur:', error instanceof Error ? error.message : String(error));
    console.error('Stack:', error instanceof Error ? error.stack : 'N/A');
    
    return NextResponse.json(
      { 
        error: 'Erreur serveur lors de la vérification',
        verified: false,
        details: error instanceof Error ? error.message : 'Unknown error'
      },
      { status: 500 }
    );
  }
}
