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

const API = process.env.NEXT_PUBLIC_API_URL;

if (!API) {
  throw new Error('API_URL is not defined');
}

export async function POST(request: NextRequest) {
  try {
    const formData = await request.formData();
    const file = formData.get('file');
    const authHeader = request.headers.get('authorization');

    if (!(file instanceof File)) {
      return NextResponse.json({ success: false, message: 'Hiányzó fájl.' }, { status: 400 });
    }

    const extension = file.name.split('.').pop()?.toLowerCase();
    if (!extension || !['jpg', 'jpeg'].includes(extension)) {
      return NextResponse.json(
        { success: false, message: 'Csak JPG/JPEG fájl tölthető fel.' },
        { status: 400 }
      );
    }

    if (file.size > 5 * 1024 * 1024) {
      return NextResponse.json(
        { success: false, message: 'A fájl mérete maximum 5 MB lehet.' },
        { status: 400 }
      );
    }

    const uploadUrl = `${API}/imageRepository/uploadFile?file=${encodeURIComponent(file.name)}`;
    const upstreamForm = new FormData();
    upstreamForm.append('file', file);

    const response = await fetch(uploadUrl, {
      method: 'POST',
      headers: authHeader ? { Authorization: authHeader } : undefined,
      body: upstreamForm,
    });

    const responseText = await response.text();
    console.error('Upload upstream response:', response.status, responseText);
    if (!response.ok) {
      return NextResponse.json(
        {
          success: false,
          message: responseText || 'Hiba történt a feltöltés során.',
        },
        { status: response.status }
      );
    }

    let data: unknown = responseText;
    try {
      data = JSON.parse(responseText);
    } catch {
      // keep raw text
    }
    if (typeof data === 'string') {
      const trimmed = data.trim();
      const isImageName = /\.jpe?g$/i.test(trimmed);
      if (!isImageName) {
        return NextResponse.json(
          {
            success: false,
            message: trimmed || 'Hiba történt a feltöltés során.',
          },
          { status: 400 }
        );
      }
    }

    const resolvedFileName = typeof data === 'string' && data.trim().length > 0 ? data : file.name;

    return NextResponse.json({
      success: true,
      fileName: resolvedFileName,
      data,
    });
  } catch (error) {
    console.error('Error uploading event image:', error);
    return NextResponse.json(
      { success: false, message: 'Hiba történt a feltöltés során.' },
      { status: 500 }
    );
  }
}
