const ALLOWED_MIME_TYPES = new Set([
  'image/jpeg',
  'image/jpg',
  'image/png',
  'image/gif',
  'image/webp',
]);

const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10 MB

export function validateImage(req, res, next) {
  const file = req.file;

  if (!file) {
    return res.status(400).json({
      ok: false,
      error: 'BAD_REQUEST',
      message: 'Файл не предоставлен',
    });
  }

  if (!ALLOWED_MIME_TYPES.has(file.mimetype)) {
    return res.status(400).json({
      ok: false,
      error: 'INVALID_FILE_TYPE',
      message: `Недопустимый тип файла. Разрешены: JPEG, PNG, GIF, WebP`,
    });
  }

  if (file.size > MAX_FILE_SIZE) {
    return res.status(400).json({
      ok: false,
      error: 'FILE_TOO_LARGE',
      message: `Файл слишком большой. Максимум: ${MAX_FILE_SIZE / 1024 / 1024}MB`,
    });
  }

  const filename = file.originalname || file.filename;
  const ext = filename.split('.').pop().toLowerCase();
  const validExtensions = ['jpg', 'jpeg', 'png', 'gif', 'webp'];

  if (!validExtensions.includes(ext)) {
    return res.status(400).json({
      ok: false,
      error: 'INVALID_EXTENSION',
      message: 'Недопустимое расширение файла',
    });
  }

  next();
}
