//                _
//     o O O   _ | |   ___
//    o       | || |  / _ \
//   TS__[O]  _\__/   \___/
//  {======|_|"""""|_|"""""|
// ./o--000'"`-0-0-'"`-0-0-'
//
// Code written by «Johannes Reckers»
//------------------------------------------------>

//------------------------------------------------>
// Imports
//------------------------------------------------>

const express = require("express");
const bodyParser = require("body-parser");
const cookieParser = require("cookie-parser");
const mysql = require("mysql2");
const path = require("path");

if (!process.env.DOCKER) {
  const dotenv = require("dotenv");
  dotenv.config();
}

//------------------------------------------------>
// Express initialization & configuration
//------------------------------------------------>

// Initialize the express instance
const app = express();

// Set views directory and engine
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "ejs");

//------------------------------------------------>
// Middlewares
//------------------------------------------------>

// Use body-parser and cookie-parser
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());

//------------------------------------------------>
// MySQL connection
//------------------------------------------------>

//! Make extra sure these values are loaded correctly, if you experience any connection issues.
const db = mysql.createConnection({
  database: process.env.DB_NAME,
  user: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  host: process.env.DB_HOST,
  port: process.env.DB_PORT
});

db.connect((error) => {
  if (error) {
    console.error("[JET] Error connecting to MySQL database:", error);
  } else {
    console.log("[JET] Database connected successfully");
  }
});

//------------------------------------------------>
// Routing
//------------------------------------------------>

const apiRouter = require("./routes/apiRoutes");

app.use("/api", apiRouter);

// Handle home route
app.get("/", (req, res) => {
  res.render("layout");
});

//------------------------------------------------>
// Start Express
//------------------------------------------------>

app.listen(process.env.PORT, () => {
  console.log(`[JET] started express on http://localhost:${process.env.PORT}`);
});