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

export async function POST(request: NextRequest) {
  try {
    // Récupérer le cookie auth_token
    const authToken = request.cookies.get('auth_token');

    if (!authToken?.value) {
      return NextResponse.json(
        { success: false, error: 'Authentication token not found' },
        { status: 401 }
      );
    }

    // Récupérer les données utilisateur depuis Laravel
    const LARAVEL_API_URL = process.env.LARAVEL_API_URL;
    const response = await fetch(`${LARAVEL_API_URL}/auth/user`, {
      method: 'GET',
      headers: {
        'Accept': 'application/json',
        'Authorization': `Bearer ${authToken.value}`
      }
    });

    if (!response.ok) {
      return NextResponse.json(
        { success: false, error: 'Failed to fetch user from Laravel' },
        { status: response.status }
      );
    }

    const data = await response.json();

    if (!data.success || !data.user) {
      return NextResponse.json(
        { success: false, error: 'User not found in Laravel' },
        { status: 404 }
      );
    }

    const laravelUser = data.user;

    // Vérifier si l'utilisateur existe déjà dans Supabase
    const { data: existingUser } = await supabase
      .from('users')
      .select('*')
      .eq('main_id', laravelUser.id)
      .single();

    if (existingUser) {
      // L'utilisateur existe déjà, retourner ses informations
      return NextResponse.json({
        success: true,
        user: existingUser,
        message: 'User already exists in Supabase'
      });
    }

    // Créer l'utilisateur dans Supabase s'il n'existe pas
    const { data: newUser, error: createError } = await supabase
      .from('users')
      .insert({
        main_id: laravelUser.id,
        username: null,
        name: laravelUser.name,
        email: laravelUser.email,
        phone: laravelUser.phone || null,
        is_affiliate: laravelUser.is_affiliate || false,
        avatar_url: null,
        status: 'offline',
        last_seen: new Date().toISOString(),
      })
      .select()
      .single();

    if (createError || !newUser) {
      console.error('Error creating user in Supabase:', createError);
      return NextResponse.json(
        { success: false, error: 'Failed to create user in Supabase' },
        { status: 500 }
      );
    }

    return NextResponse.json({
      success: true,
      user: newUser,
      message: 'User registered successfully in Supabase'
    });

  } catch (error) {
    console.error('Error registering user:', error);
    return NextResponse.json(
      { success: false, error: 'Internal server error' },
      { status: 500 }
    );
  }
}
