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

export async function GET(request: NextRequest) {
  try {
    const searchParams = request.nextUrl.searchParams;
    const fileUrl = searchParams.get('url');
    const fileName = searchParams.get('filename');

    console.log('🔽 Проксируем скачивание файла:', fileUrl);

    if (!fileUrl) {
      return NextResponse.json(
        { error: 'URL файла не предоставлен' },
        { status: 400 }
      );
    }

    // Проверяем, что URL начинается с нашего доверенного домена
    if (!fileUrl.startsWith('https://s3.twcstorage.ru/')) {
      return NextResponse.json(
        { error: 'Недопустимый URL файла' },
        { status: 400 }
      );
    }

    // Загружаем файл с S3
    const response = await fetch(fileUrl);
    
    if (!response.ok) {
      console.error('❌ Ошибка загрузки файла с S3:', response.status, response.statusText);
      return NextResponse.json(
        { error: 'Файл не найден' },
        { status: 404 }
      );
    }

    // Получаем буфер файла
    const arrayBuffer = await response.arrayBuffer();
    const buffer = new Uint8Array(arrayBuffer);
    
    console.log('✅ Файл успешно загружен с S3, размер:', buffer.length);

    // Определяем MIME-тип из исходного ответа или устанавливаем по умолчанию
    const contentType = response.headers.get('content-type') || 'application/octet-stream';
    
    // Правильно кодируем имя файла для поддержки Unicode символов
    let contentDisposition = 'attachment';
    if (fileName) {
      // Используем RFC 5987 кодирование для поддержки Unicode
      const encodedFileName = encodeURIComponent(fileName);
      contentDisposition = `attachment; filename*=UTF-8''${encodedFileName}`;
    }

    // Возвращаем файл с правильными заголовками для скачивания
    return new NextResponse(buffer, {
      headers: {
        'Content-Type': contentType,
        'Content-Disposition': contentDisposition,
        'Content-Length': buffer.length.toString(),
        'Cache-Control': 'no-cache',
      },
    });

  } catch (error) {
    console.error('❌ Ошибка в download-file API:', error);
    return NextResponse.json(
      { error: 'Внутренняя ошибка сервера' },
      { status: 500 }
    );
  }
} 