const pool = require('../db');

exports.showAddProductForm = (req, res) => {
   res.render('addProduct');
};

exports.createProduct = async (req, res) => {
    const { product_name, price, image, description } = req.body;
    const userEmail = req.session.userIdEmail;

    try {
        // ดึง user ID โดยใช้ email ที่เก็บไว้ใน session
        const [userRows] = await pool.query('SELECT id FROM users WHERE email = ?', [userEmail]);
        
        if (userRows.length === 0) {
            return res.status(400).send('ไม่พบข้อมูลผู้ใช้งาน');
        }
        
        const ownerId = userRows[0].id;

        // insert ข้อมูลสินค้า โดยใช้ ID ของผู้ใช้งาน
        const sql = 'INSERT INTO products (product_name, price, image, description, owner) VALUES (?, ?, ?, ?, ?)';
        await pool.query(sql, [product_name, price, image, description, ownerId]);

        res.redirect('/');
    } catch (err) {
        res.status(500).send('เกิดข้อผิดพลาดในการเพิ่มสินค้า: ' + err.message);
    }
};

 
exports.showUpdateProductForm = async (req, res) => {
    const productId = req.params.id;
    try {
        const [rows] = await pool.query('SELECT * FROM products WHERE product_id = ?', [productId]);
        if (rows.length === 0) {
            return res.status(404).send('ไม่พบสินค้านี้');
        }
        res.render('editProduct', { product: rows[0] });
    } catch (err) {
        res.status(500).send('เกิดข้อผิดพลาดในการโหลดข้อมูลสินค้า: ' + err.message);
    }
};

exports.updateProduct = async (req, res) => {
    const productId = req.params.id;
    const { product_name, price, image, description } = req.body;
    const currentUserEmail = req.session.userIdEmail;

    try {
        // ดึงข้อมูลสินค้าพร้อมอีเมลของเจ้าของสินค้า
        const [rows] = await pool.query(`
            SELECT p.*, u.email as owner_email
            FROM products p
            JOIN users u ON p.owner = u.id
            WHERE p.product_id = ?`, [productId]);

        if (rows.length === 0) {
            return res.status(404).send('ไม่พบสินค้านี้');
        }

        const product = rows[0];

        // เปรียบเทียบด้วย email ที่ถูกต้อง
        if (product.owner_email !== currentUserEmail) {
            return res.status(403).send('คุณไม่มีสิทธิ์แก้ไขสินค้านี้');
        }

        // ถ้ามีสิทธิ์ก็อัปเดตข้อมูลได้
        const sql = 'UPDATE products SET product_name = ?, price = ?, image = ?, description = ? WHERE product_id = ?';
        await pool.query(sql, [product_name, price, image, description, productId]);

        res.redirect('/');
    } catch (err) {
        res.status(500).send('เกิดข้อผิดพลาดในการอัปเดตสินค้า: ' + err.message);
    }
};

exports.deleteProduct = async (req, res) => {
    const productId = req.params.id;
    const currentUserEmail = req.session.userIdEmail;
    try {
      // ดึงข้อมูลสินค้าพร้อมอีเมลเจ้าของสินค้า
      const [rows] = await pool.query(`
        SELECT p.*, u.email as owner_email
        FROM products p
        JOIN users u ON p.owner = u.id
        WHERE p.product_id = ?`, [productId]);

      if (rows.length === 0) {
        return res.status(404).send('ไม่พบสินค้านี้');
      }

      const product = rows[0];

      // ตรวจสอบสิทธิ์ด้วยอีเมล
      if (product.owner_email !== currentUserEmail) {
        return res.status(403).send('คุณไม่มีสิทธิ์ลบสินค้านี้');
      }

      // ถ้าผ่านเงื่อนไข ก็สามารถลบสินค้าได้
      await pool.query('DELETE FROM products WHERE product_id = ?', [productId]);
      res.redirect('/');
    } catch (err) {
      res.status(500).send('Database error: ' + err.message);
    }
};



exports.searchProducts = async (req, res) => {
    const searchQuery = req.query.q; // รับค่าค้นหาจาก query parameter
    try {
        const sql = 'SELECT * FROM products WHERE product_name LIKE ?';
        const [rows] = await pool.query(sql, [`%${searchQuery}%`]); // ค้นหาชื่อสินค้าที่คล้ายกัน

        res.render('searchResults', { products: rows, searchQuery }); // ส่งผลลัพธ์ไปยังหน้า searchResults.ejs
    } catch (err) {
        res.status(500).send('เกิดข้อผิดพลาดในการค้นหา: ' + err.message);
    }
};

exports.showProductDetails = async (req, res) => {
    const productId = req.params.id;

    try {
        const [rows] = await pool.query(`
            SELECT p.*, u.email as owner_email
            FROM products p
            JOIN users u ON p.owner = u.id
            WHERE p.product_id = ?`, [productId]);

        if (rows.length === 0) {
            return res.status(404).send('ไม่พบสินค้านี้');
        }

        const product = rows[0];


        res.render('product', {
            product,
            currentUserEmail: req.session.userIdEmail
          });
    } catch (err) {
        res.status(500).send('เกิดข้อผิดพลาด: ' + err.message);
    }
};




exports.orderHistory = async (req, res) => {
    if (!req.session.userIdEmail) {
        return res.status(401).send('กรุณาเข้าสู่ระบบเพื่อดูประวัติการสั่งซื้อ');
    }

    try {
        const userEmail = req.session.userIdEmail;

        // ดึง user_id จาก email
        const [user] = await pool.query('SELECT id FROM users WHERE email = ?', [userEmail]);
        if (user.length === 0) {
            return res.status(404).send('ไม่พบผู้ใช้งาน');
        }
        const userId = user[0].id;

        // ตรงนี้เปลี่ยนจาก user_id เป็น owner
        const [orders] = await pool.query(
            'SELECT * FROM orders WHERE owner = ? ORDER BY created_at DESC',
            [userId]
        );

        // ดึงรายการสินค้าสำหรับแต่ละคำสั่งซื้อ
        for (let order of orders) {
            const [items] = await pool.query(
                `SELECT oi.*, p.product_name, p.image 
                 FROM order_items oi 
                 JOIN products p ON oi.phone_id = p.product_id 
                 WHERE oi.order_id = ?`,
                [order.order_id]
            );
            order.items = items;
        }

        res.render('orderHistory', { orders });
    } catch (err) {
        res.status(500).send('เกิดข้อผิดพลาดในการดึงประวัติการสั่งซื้อ: ' + err.message);
    }
};