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

const router = Router();

// Configuration de multer pour gérer les uploads en mémoire
const upload = multer({
  storage: multer.memoryStorage(),
  limits: {
    fileSize: 10 * 1024 * 1024, // 10MB max
  },
});

/**
 * Route d'upload de fichiers vers S3
 * POST /api/upload-file
 * 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 ext = path.extname(file.originalname);
    const baseName = path.basename(file.originalname, ext);
    const safeBaseName = baseName.replace(/[^a-zA-Z0-9-_]/g, "_");
    const fileName = `rappels-attachments/${Date.now()}-${randomSuffix}-${safeBaseName}${ext}`;

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

    console.log(`[UploadFile] Fichier uploadé: ${file.originalname} (${file.size} octets)`);

    return res.json({
      success: true,
      url: result.url,
      key: fileName,
      filename: file.originalname,
      mimetype: file.mimetype,
      size: file.size,
      message: "Fichier uploadé avec succès",
    });
  } catch (error) {
    console.error("[UploadFile] Error:", error);
    return res.status(500).json({
      success: false,
      message: "Erreur lors de l'upload du fichier",
    });
  }
});

export default router;
