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

interface GetInviterIdRequest {
  invitationCode: string;
}

interface LaravelResponse {
  success: boolean;
  inviter_id?: number;
  message?: string;
  errors?: Record<string, string[]>;
}

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

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

    // Parser le body de la requête
    const body: GetInviterIdRequest = await request.json();

    // Validation
    if (!body.invitationCode || typeof body.invitationCode !== 'string' || body.invitationCode.trim() === '') {
      return NextResponse.json(
        { error: 'Invalid invitation code' },
        { status: 422 }
      );
    }

    // Appeler l'API Laravel pour récupérer l'ID de l'invitant
    const laravelResponse = await fetch(
      `${process.env.LARAVEL_API_URL}/owa-spaces/invitations/anonymous-by-code?invitation_code=${encodeURIComponent(body.invitationCode)}`,
      {
        method: 'GET',
        headers: {
          'Authorization': `Bearer ${authToken.value}`,
          'Content-Type': 'application/json',
          'Accept': 'application/json',
        },
      }
    );

    const laravelData: LaravelResponse = await laravelResponse.json();

    if (!laravelResponse.ok) {
      if (laravelResponse.status === 401) {
        return NextResponse.json(
          { error: 'Unauthorized - Invalid authentication token' },
          { status: 401 }
        );
      }

      if (laravelResponse.status === 422) {
        return NextResponse.json(
          {
            error: 'Validation error',
            details: laravelData.errors || laravelData.message
          },
          { status: 422 }
        );
      }

      if (laravelResponse.status === 404) {
        return NextResponse.json(
          { error: laravelData.message || 'Invitation not found' },
          { status: 404 }
        );
      }

      return NextResponse.json(
        {
          error: 'Failed to get inviter ID',
          details: laravelData.message || 'Unknown error'
        },
        { status: laravelResponse.status }
      );
    }

    // Vérifier que la réponse contient l'ID de l'invitant
    if (!laravelData.success || !laravelData.inviter_id) {
      return NextResponse.json(
        { error: 'Invalid response from server' },
        { status: 500 }
      );
    }

    // Retourner l'ID de l'invitant dans le format attendu par le frontend
    return NextResponse.json({
      inviterMainId: laravelData.inviter_id,
    }, { status: 200 });

  } catch (error) {
    console.error('Error getting inviter ID:', error);
    return NextResponse.json(
      {
        error: 'Server error while getting inviter ID',
        details: error instanceof Error ? error.message : 'Unknown error'
      },
      { status: 500 }
    );
  }
}
