/**
 * Локальный fallback-сервер для /uploads/* в dev-режиме.
 * На продакшене Apache/Nginx отдаёт uploads/ напрямую — этот роут не используется.
 */
import { NextApiRequest, NextApiResponse } from 'next';
import fs from 'fs';
import path from 'path';

const MIME_MAP: Record<string, string> = {
  jpg: 'image/jpeg',
  jpeg: 'image/jpeg',
  png: 'image/png',
  gif: 'image/gif',
  webp: 'image/webp',
  svg: 'image/svg+xml',
  ico: 'image/x-icon',
  pdf: 'application/pdf',
  mp4: 'video/mp4',
  webm: 'video/webm',
};

export default function handler(req: NextApiRequest, res: NextApiResponse) {
  const parts = req.query.path;
  if (!parts) return res.status(400).end();

  const filePath = path.join(
    process.cwd(),
    'uploads',
    ...(Array.isArray(parts) ? parts : [parts])
  );

  // Защита от path traversal
  const uploadsRoot = path.join(process.cwd(), 'uploads');
  if (!filePath.startsWith(uploadsRoot)) {
    return res.status(403).end();
  }

  if (!fs.existsSync(filePath)) {
    return res.status(404).end();
  }

  const ext = path.extname(filePath).slice(1).toLowerCase();
  const contentType = MIME_MAP[ext] || 'application/octet-stream';

  res.setHeader('Content-Type', contentType);
  res.setHeader('Cache-Control', 'public, max-age=3600');

  const stream = fs.createReadStream(filePath);
  stream.on('error', () => res.status(500).end());
  stream.pipe(res);
}
