import { Router } from "express";
import multer from "multer";
import { storagePut } from "../storage";
import { randomBytes } from "crypto";

const router = Router();

// Configuration de multer pour gérer les uploads en mémoire
const upload = multer({
  storage: multer.memoryStorage(),
  limits: {
    fileSize: 5 * 1024 * 1024, // 5MB max
  },
  fileFilter: (req, file, cb) => {
    // Vérifier que c'est bien une image
    if (file.mimetype.startsWith("image/")) {
      cb(null, true);
    } else {
      cb(new Error("Le fichier doit être une image"));
    }
  },
});

/**
 * Route d'upload d'images vers S3
 * POST /api/upload-image
 * Body: multipart/form-data avec un champ "file"
 */
router.post("/", upload.single("file"), async (req, res) => {
  try {
    if (!req.file) {
      return res.status(400).json({
        success: false,
        message: "Aucun fichier fourni",
      });
    }

    const file = req.file;
    
    // Générer un nom de fichier unique
    const randomSuffix = randomBytes(8).toString("hex");
    const extension = file.originalname.split(".").pop() || "jpg";
    const fileName = `attestations/${Date.now()}-${randomSuffix}.${extension}`;

    // Upload vers S3
    const result = await storagePut(
      fileName,
      file.buffer,
      file.mimetype
    );

    return res.json({
      success: true,
      url: result.url,
      s3Key: fileName,
      message: "Image uploadée avec succès",
    });
  } catch (error) {
    console.error("[UploadImage] Error:", error);
    return res.status(500).json({
      success: false,
      message: "Erreur lors de l'upload de l'image",
    });
  }
});

export default router;
