require('dotenv').config();
const express = require('express');
const session = require('express-session');
const path = require('path');
const cors = require("cors");
const bodyParser = require('body-parser');
const db = require('./db');
const authRoutes = require('./routes/auth');
const postRoutes = require('./routes/posts'); // เส้นทางสำหรับบทความ
const settingsRoutes = require('./routes/settings');

const app = express();

// Middleware
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(bodyParser.json());


// ตั้งค่า Session
app.use(session({
  secret: process.env.SESSION_SECRET || 'beaglelover',
  resave: false,
  saveUninitialized: false
}));
app.use((req, res, next) => {
  res.locals.user = req.session.user;
  next();
});
// เสิร์ฟไฟล์สแตติก
app.use(express.static(path.join(__dirname, 'public')));

// ตั้งค่า View Engine
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));

app.use('/auth', authRoutes);
app.use('/settings', settingsRoutes);
app.use('/posts', postRoutes);

// Middleware ตรวจสอบการล็อกอิน

// ---------------------- เส้นทางหลัก ----------------------
// หน้า Login
app.get('/', (req, res) => {
  res.render('auth/login', { error: null });
});

// หน้า Index (เฉพาะผู้ที่ล็อกอิน)
// ตัวอย่างใน app.js
app.get('/index', async (req, res) => {
  if (!req.session.user) return res.redirect('/');
  try {
    // ดึง posts จากฐานข้อมูล (หากต้องการ)
    const [posts] = await db.query(
      `SELECT p.*, u.username, c.name AS category_name 
       FROM posts p 
       JOIN users u ON p.user_id = u.id 
       JOIN categories c ON p.category_id = c.id 
       ORDER BY p.created_at DESC`
    );
    res.render('pages/index', { posts, user: req.session.user });
  } catch (error) {
    console.error('Error fetching posts:', error);
    res.render('pages/index', { posts: [], user: req.session.user });
  }
});

// ค้นหาบทความ (ค้นหาจาก title)
app.get('/index/search', async (req, res) => {
  if (!req.session.user) return res.redirect('/');
  const { keyword } = req.query;
  try {
    const [posts] = await db.query(
      `SELECT p.*, u.username, c.name AS category_name 
       FROM posts p 
       JOIN users u ON p.user_id = u.id 
       JOIN categories c ON p.category_id = c.id
       WHERE p.title LIKE ?
       ORDER BY p.created_at DESC`,
      [`%${keyword}%`]
    );
    res.render('pages/index', { posts, user: req.session.user, keyword });
  } catch (error) {
    console.error('Error searching posts:', error);
    res.render('pages/index', { posts: [], user: req.session.user, keyword: '' });
  }
});


// เริ่มต้นเซิร์ฟเวอร์
const port = process.env.PORT || 3000;
app.listen(port, () => {
  console.log(`Server is running on port ${port}`);
});