const express = require('express');
const bodyParser = require('body-parser');
const mysql = require('mysql2');
const session = require('express-session');
const app = express();
const port = 3000;

const authRoutes = require('./routes/authRoutes');
const bookRoutes = require('./routes/bookRoutes');
const homeRoutes = require('./routes/homeRoutes');
const searchRoutes = require('./routes/searchRoutes');

// Database connection
const db = mysql.createConnection({
    host: process.env.DB_HOST || "localhost",
    user: process.env.DB_USER || "root",
    password: process.env.DB_PASS || "",
    database: process.env.DB_NAME || "bookcommu_db",
    port: process.env.DB_PORT || 3306,
});

db.connect((err) => {
    if (err) {
        console.error('Error connecting to MySQL:', err);
        return;
    }
    console.log('Connected to MySQL');
});

// Middleware
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.set('view engine', 'ejs');
app.use(express.static('public'));

// Session middleware
app.use(session({
    secret: 'your_secret_key',
    resave: false,
    saveUninitialized: true
}));

app.use((req, res, next) => {
    if (!req.session.returnTo && req.method === "GET" && !req.path.startsWith('/login') && !req.path.startsWith('/register')) {
        req.session.returnTo = req.originalUrl;
    }
    next();
});

// Database middleware
app.use((req, res, next) => {
    req.db = db;
    next();
});

// Routes - make sure all route files export router properly
app.use('/', homeRoutes);
app.use('/', authRoutes);
app.use('/', bookRoutes);
app.use('/', searchRoutes);

app.listen(port, () => {
    console.log(`Server is running on http://localhost:${port}`);
});

module.exports = app;