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

const INFERENCE_API_URL = process.env.INFERENCE_API_URL || 'http://localhost:8001';
const INFERENCE_API_TIMEOUT = parseInt(process.env.INFERENCE_API_TIMEOUT || '10000', 10);

export async function GET(request: NextRequest) {
  try {
    // Forward request to Python inference service
    const controller = new AbortController();
    const timeoutId = setTimeout(() => controller.abort(), INFERENCE_API_TIMEOUT);

    try {
      const response = await fetch(`${INFERENCE_API_URL}/model/info`, {
        method: 'GET',
        headers: {
          'Content-Type': 'application/json',
          'X-API-Key': process.env.API_KEY || '',
        },
        signal: controller.signal,
      });

      clearTimeout(timeoutId);

      // Forward the response from the inference service
      const data = await response.json();

      if (!response.ok) {
        // Handle 503 (no model available) specifically
        if (response.status === 503) {
          return NextResponse.json(
            { error: 'No model available' },
            { status: 503 }
          );
        }

        return NextResponse.json(
          { error: data.detail || 'Failed to get model info' },
          { status: response.status }
        );
      }

      return NextResponse.json(data);
    } catch (fetchError: any) {
      clearTimeout(timeoutId);

      if (fetchError.name === 'AbortError') {
        return NextResponse.json(
          { error: 'Model info request timed out' },
          { status: 504 }
        );
      }

      throw fetchError;
    }
  } catch (error: any) {
    console.error('Model info proxy error:', error);

    // Check if it's a connection error
    if (error.cause?.code === 'ECONNREFUSED' || error.message?.includes('fetch failed')) {
      return NextResponse.json(
        { error: 'Inference service unavailable' },
        { status: 503 }
      );
    }

    return NextResponse.json(
      { error: 'Internal server error' },
      { status: 500 }
    );
  }
}
