const express = require("express");
const pool = require("../config/database");
const multer = require("multer");
const path = require("path");
const fs = require("fs");


const router = express.Router();

// ตั้งค่าที่เก็บไฟล์รูป
const uploadDir = "public/uploads";
if (!fs.existsSync(uploadDir)) {
    fs.mkdirSync(uploadDir, { recursive: true });
}

// ตั้งค่า Multer สำหรับอัปโหลดรูป
const storage = multer.diskStorage({
    destination: (req, file, cb) => {
        cb(null, uploadDir);
    },
    filename: (req, file, cb) => {
        cb(null, Date.now() + path.extname(file.originalname)); // ตั้งชื่อไฟล์เป็น timestamp
    }
});
const upload = multer({ storage: storage });

// ดึงสินค้าทั้งหมด
router.get("/", async (req, res) => {
    try {
        const [products] = await pool.execute("SELECT * FROM products");
        res.render("product", { products });
    } catch (error) {
        console.error("Error fetching products:", error);
        res.status(500).send("Error loading products.");
    }
});

// แสดงฟอร์มเพิ่มสินค้า
router.get("/add", (req, res) => {
    res.render("product_add", { message: "" });
});

// เพิ่มสินค้าใหม่พร้อมรูป
router.post("/add", upload.single("image"), async (req, res) => {
    console.log("req.file:", req.file);  // ดูว่า multer ได้รับไฟล์ไหม
    console.log("req.body:", req.body);  // ดูค่าที่ส่งมาจากฟอร์ม

    try {
        const { name, price, stock, description } = req.body;

        if (!req.file) {
            console.error("Error: No file uploaded!");
            return res.status(400).send("File upload failed");
        }

        const imagePath = "/uploads/" + req.file.filename;
        console.log("imagePath:", imagePath);  // ตรวจสอบพาธไฟล์รูป

        try {
            await pool.execute(
                "INSERT INTO products (name, price, stock, description, image_url) VALUES (?, ?, ?, ?, ?)",
                [name, price, stock, description, imagePath]
            );
        } catch (error) {
            console.error("Database Error:", error);
            return res.status(500).json({ error: "Database Error", details: error });
        }

        res.redirect("/products");
    } catch (error) {
        console.error("Error adding product:", error);
        res.status(500).send("Error adding product.");
    }
});

// ดึงข้อมูลสินค้าตาม ID และแสดงหน้าแก้ไข
router.get("/edit/:id", async (req, res) => {
    try {
        const [rows] = await pool.execute("SELECT * FROM products WHERE id = ?", [req.params.id]);
        if (rows.length === 0) {
            return res.status(404).send("ไม่พบสินค้า");
        }
        res.render("product_edit", { product: rows[0] });
    } catch (error) {
        console.error("Error fetching product:", error);
        res.status(500).send("Error loading product.");
    }
});

// อัปเดตข้อมูลสินค้า
router.post("/edit/:id", upload.single("image"), async (req, res) => {
    try {
        const { name, price, stock, description } = req.body;
        let imagePath = req.body.oldImage; // ใช้รูปเดิมถ้าไม่มีการอัปโหลดใหม่

        // ถ้ามีการอัปโหลดรูปใหม่ ให้ใช้ไฟล์ใหม่
        if (req.file) {
            imagePath = "/uploads/" + req.file.filename;
        }

        console.log("Update values:", { name, price, stock, description, imagePath, id: req.params.id });

        await pool.execute(
            "UPDATE products SET name=?, price=?, stock=?, description=?, image_url=? WHERE id=?",
            [
                name ?? null,
                price ?? null,
                stock ?? null,
                description ?? null,
                imagePath ?? null,
                req.params.id ?? null
            ]
        );

        res.redirect("/products"); // กลับไปยังหน้ารายการสินค้า
    } catch (error) {
        console.error("Error updating product:", error);
        res.status(500).send("Error updating product.");
    }
});


module.exports = router;