const Note = require('../Models/Note');
const Category = require('../Models/Category');
const jwt = require('jsonwebtoken');

// NoteController - จัดการ Logic การทำงานของโน้ต
class NoteController {
  // แสดงหน้าแรกที่มีโน้ตทั้งหมด
  static async index(req, res) {
    // ดึงข้อมูลโน้ตทั้งหมด
    Note.getAll((err, notes) => {
      if (err) {
        console.log(err);
        return res.status(500).send('เกิดข้อผิดพลาดในการดึงข้อมูล');
      }
      
      // ดึงข้อมูล categories สำหรับ dropdown
      Category.getAll((err, categories) => {
        if (err) {
          console.log(err);
          return res.status(500).send('เกิดข้อผิดพลาดในการดึงข้อมูล');
        }
        
        // ส่งข้อมูลไปแสดงที่หน้า dashboard
        res.render('dashboard', { 
          data: notes,
          categories: categories,
          user: req.user
        });
      });
    });
  }

  // Get all notes (API)
  static apiIndex(req, res) {
    Note.getAll((err, notes) => {
      if (err) {
        console.log(err);
        return res.status(500).json({ error: 'Database error' });
      }
      res.json(notes);
    });
  }

  // สร้างโน้ตใหม่
  static create(req, res) {
    // เตรียมข้อมูลจากฟอร์ม
    const noteData = {
      title: req.body.title,
      content: req.body.content,
      userId: req.user.id,  // ได้จาก middleware authentication
      categoryId: req.body.category_id || null
    };

    // บันทึกลงฐานข้อมูล
    Note.create(noteData, (err, result) => {
      if (err) {
        console.log(err);
        return res.status(500).send('เกิดข้อผิดพลาดในการบันทึกโน้ต');
      }
      // กลับไปหน้า dashboard เมื่อบันทึกสำเร็จ
      res.redirect('/dashboard');
    });
  }

  // Create a new note (API)
  static apiCreate(req, res) {
    const noteData = {
      title: req.body.title,
      content: req.body.content,
      userId: req.user.id,
      categoryId: req.body.category_id || null
    };

    Note.create(noteData, (err, result) => {
      if (err) {
        console.log(err);
        return res.status(500).json({ error: 'Failed to create note' });
      }
      res.status(201).json(result);
    });
  }

  // อัพเดทโน้ต
  static update(req, res) {
    console.log('ข้อมูลที่ส่งมา:', req.body);
    
    // ตรวจสอบว่ามี note_id หรือไม่
    const id = req.body.note_id;
    if (!id) {
      console.log('ไม่พบ note_id');
      return res.status(400).json({ error: 'ต้องระบุ Note ID' });
    }
    
    // เตรียมข้อมูลสำหรับอัพเดท
    const noteData = {
      title: req.body.title,
      content: req.body.content,
      categoryId: req.body.category_id || null
    };
    console.log('ข้อมูลที่จะอัพเดท:', { id, noteData });

    // อัพเดทลงฐานข้อมูล
    Note.update(id, noteData, (err, result) => {
      if (err) {
        console.log('เกิดข้อผิดพลาดในการอัพเดท:', err);
        return res.status(500).json({ error: 'เกิดข้อผิดพลาดในการอัพเดทโน้ต', details: err.message });
      }
      console.log('อัพเดทสำเร็จ:', result);
      res.json({ success: true, message: 'อัพเดทโน้ตสำเร็จ' });
    });
  }

  // Update a note (API)
  static apiUpdate(req, res) {
    const id = req.params.id;
    const noteData = {
      title: req.body.title,
      content: req.body.content,
      categoryId: req.body.category_id || null
    };

    Note.update(id, noteData, (err, result) => {
      if (err) {
        console.log(err);
        return res.status(500).json({ error: 'Failed to update note' });
      }
      res.json(result);
    });
  }

  // ลบโน้ต
  static delete(req, res) {
    const id = req.params.id;

    Note.delete(id, (err, result) => {
      if (err) {
        console.log(err);
        return res.status(500).send('เกิดข้อผิดพลาดในการลบโน้ต');
      }
      res.redirect('/dashboard');
    });
  }

  // Delete a note (API)
  static apiDelete(req, res) {
    const id = req.params.id;

    Note.delete(id, (err, result) => {
      if (err) {
        console.log(err);
        return res.status(500).json({ error: 'Failed to delete note' });
      }
      res.json(result);
    });
  }

  // Search notes by title or content (web)
  static search(req, res) {
    const searchTerm = req.query.searchTerm;
    
    if (!searchTerm) {
      return res.redirect('/dashboard');
    }

    Note.search(searchTerm, (err, notes) => {
      if (err) {
        console.log(err);
        return res.status(500).send('Database error');
      }
      
      Category.getAll((err, categories) => {
        if (err) {
          console.log(err);
          return res.status(500).send('Database error');
        }
        
        res.render('dashboard', { 
          data: notes,
          categories: categories,
          searchTerm: searchTerm,
          user: req.user
        });
      });
    });
  }

  // แสดงโน้ตของผู้ใช้ที่ล็อกอินอยู่
  static myNotes(req, res) {
    const userId = req.user.id;
    
    // ดึงโน้ตของผู้ใช้
    Note.getByUserId(userId, (err, notes) => {
      if (err) {
        console.log(err);
        return res.status(500).send('เกิดข้อผิดพลาดในการดึงข้อมูล');
      }
      
      // ดึง categories สำหรับ dropdown
      Category.getAll((err, categories) => {
        if (err) {
          console.log(err);
          return res.status(500).send('เกิดข้อผิดพลาดในการดึงข้อมูล');
        }
        
        res.render('dashboard', { 
          data: notes,
          categories: categories,
          myNotes: true,
          user: req.user
        });
      });
    });
  }
}

module.exports = NoteController;