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

interface ApiError extends Error {
  message: string;
}

interface SignInResponse {
  success: boolean;
  token: string;
}

export async function POST(request: NextRequest) {
  try {
    // Récupérer les données du corps de la requête
    const data = await request.json();
    
    // URL de l'API Laravel (à mettre dans les variables d'environnement)
    const LARAVEL_API_URL = process.env.LARAVEL_API_URL;

    // Envoyer la requête à l'API Laravel
    const response = await fetch(`${LARAVEL_API_URL}/auth/sign-in`, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        Accept: 'application/json',
      },
      body: JSON.stringify({
        temp_token: data.owa_auth_token,
        csrf_token: data.csrf_token,
      }),
    })

    // Récupérer la réponse
    const responseData = await response.json() as SignInResponse;

    // Si la réponse n'est pas ok, on lance une erreur
    if (!response.ok || !responseData.success) {
      throw new Error('Authentication failed');
    }

    // Créer la réponse avec le cookie
    const res = NextResponse.json({ success: true }, { status: 200 });

    // Ajouter le cookie à la réponse
    res.cookies.set('auth_token', responseData.token, {
      httpOnly: true,
      secure: process.env.NODE_ENV === 'production',
      sameSite: 'strict',
      maxAge: 1 * 24 * 60 * 60, // 1 jour
      path: '/'
    });

    return res;

  } catch (error: unknown) {
    console.error('Signin error:', error);
    const apiError = error as ApiError;
    return Response.json(
      { 
        success: false, 
        message: apiError.message || 'An error occurred during authentication'
      },
      { status: 500 }
    );
  }
} 