import "./utils/env";

import express, { Application, NextFunction, Request, Response } from "express";

import authRoute from "./routes/auth";
import bodyParser from "body-parser";
import expressSession from "express-session";
import mongoose from "mongoose";
import newsRoute from "./routes/news";
import usersRoute from "./routes/user";

mongoose
  .connect("mongodb://localhost:27017/bodysch", {
    useNewUrlParser: true,
    useCreateIndex: true,
    useUnifiedTopology: true,
  })
  .then(() => {
    console.log("Connected to database");
  })
  .catch((err) => {
    console.log(
      "MongoDB connection error. Please make sure MongoDB is running. " + err
    );
    // process.exit();
  });

const app: Application = express();

app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
app.use(
  expressSession({
    secret: process.env.SESSION_SECRET || "secret",
    resave: false,
    saveUninitialized: true,
    cookie: { secure: false },
  })
);

app.get("/api/v1/", (req: Request, res: Response) => {
  let message = "World!";
  if (req.session!.user) message = req.session!.user!.name || "World!";
  res.send("Hello " + message);
});

// Register routes

authRoute(app);

newsRoute(app);

usersRoute(app);

app.use((err: any, req: Request, res: Response, next: NextFunction) => {
  res.status(500).send("Houston, we have a problem!");

  //Flush out the stack to the console
  console.error(err.stack);
});

app.listen(8000, () => console.log(`Example app listening on port 8000!`));