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 chatAIRouter = require('./routes/chatAI');

const app = express();

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

// ตั้งค่า Session
app.use(session({
  secret: process.env.SESSION_SECRET,
  resave: false,
  saveUninitialized: false
}));

// Serve Static Files
app.use(express.static(path.join(__dirname, 'public')));

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

// ใช้ router สำหรับ Auth
app.use('/auth', authRoutes);

// ---------------------- Routes ----------------------
app.get('/', (req, res) => {
  res.render('auth/login', { error: null });
});

app.get('/register', (req, res) => {
  res.render('auth/register', { error: null, errors: null });
});

app.get('/index', async (req, res) => {
  try {
    const [activities] = await db.query('SELECT * FROM activity');
    res.render('pages/index', { activities, user: req.session.user });
  } catch (error) {
    console.error('Error fetching activities:', error);
    res.status(500).send('เกิดข้อผิดพลาดในการดึงข้อมูล');
  }
});

// Routes ที่ต้องล็อกอินก่อนเข้าใช้งาน
const protectedRoutes = ['/booking', '/chat', '/dashboard', '/settings'];
protectedRoutes.forEach(route => {
  app.get(route, (req, res) => {
    if (!req.session.user) return res.redirect('/');
    res.render(`pages${route}`, { user: req.session.user });
  });
});

// Chat AI Route
app.use('/api', chatAIRouter);
app.get('/chatAI', (req, res) => {
  res.render('pages/chatAI', { user: req.session.user });
});

// Start Server
const port = process.env.PORT || 3000;
app.listen(port, () => {
  console.log(`🚀 Server started on port ${port}`);
});