
import { Router } from "express";
import { upload } from "../_core/upload";
import { COOKIE_NAME } from "@shared/const";
import jwt from "jsonwebtoken";

const uploadRouter = Router();

// Middleware to check authentication for uploads
const requireAuth = (req: any, res: any, next: any) => {
    // Manually parse cookies to avoid dependency issues
    const cookieHeader = req.headers.cookie;
    let token = req.headers.authorization?.split(" ")[1];

    if (!token && cookieHeader) {
        const cookies = Object.fromEntries(
            cookieHeader.split('; ').map((c: string) => {
                const [key, ...v] = c.split('=');
                return [key.trim(), v.join('=')];
            })
        );
        token = cookies[COOKIE_NAME];
    }

    if (!token) {
        return res.status(401).json({ error: "Non autorisé" });
    }

    try {
        jwt.verify(token, process.env.JWT_SECRET || "s3cret-leifo-key-change-me");
        next();
    } catch (error) {
        return res.status(401).json({ error: "Session invalide" });
    }
};

uploadRouter.post("/upload", requireAuth, upload.single("image"), (req, res) => {
    if (!req.file) {
        return res.status(400).json({ error: "Aucun fichier fourni" });
    }

    // Return the public URL of the uploaded image
    // Assuming client/public is served as static root
    const publicUrl = `/uploads/${req.file.filename}`;

    res.json({ url: publicUrl });
});

export { uploadRouter };
