require('dotenv').config();
const path = require('path');
const express = require('express');
const session = require('express-session');

// Initialise la base de données (création des tables + seed) dès le require.
require('./db');

const app = express();
const PORT = process.env.PORT || 3000;

// Vues (espace admin) en EJS
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));

// Lecture des corps de requête (formulaires + JSON)
app.use(express.urlencoded({ extended: true }));
app.use(express.json());

// Sessions (connexion admin)
app.use(session({
  secret: process.env.SESSION_SECRET || 'dev-secret-a-changer',
  resave: false,
  saveUninitialized: false,
  cookie: { httpOnly: true, sameSite: 'lax', maxAge: 1000 * 60 * 60 * 8 } // 8 h
}));

// Variables disponibles dans toutes les vues
app.use((req, res, next) => {
  res.locals.siteName = process.env.SITE_NAME || 'Immobilier';
  res.locals.currentUser = req.session.userEmail || null;
  next();
});

// Site vitrine (fichiers statiques) + photos uploadées
app.use(express.static(path.join(__dirname, 'public')));

// Routes
app.use('/', require('./routes/public'));     // API publique : /api/biens, /api/contact
app.use('/admin', require('./routes/auth'));  // /admin/login, /admin/logout
app.use('/admin', require('./routes/admin')); // espace admin protégé

// 404
app.use((req, res) => res.status(404).send('Page introuvable.'));

// Gestion d'erreurs
app.use((err, req, res, next) => {
  console.error(err);
  res.status(500).send('Erreur serveur.');
});

app.listen(PORT, () => {
  console.log(`\n  Serveur démarré → http://localhost:${PORT}`);
  console.log(`  Espace admin    → http://localhost:${PORT}/admin\n`);
});
