require('dotenv').config();
require("./lib/api");
const express = require('express');
const fileUpload = require('express-fileupload');
const bodyParser = require('body-parser');
const database = require('./config/database');
const app = express();
const cors = require('cors');

database.authenticate()
    .then(() => console.log("Connected to " + process.env.MYSQL_HOSTNAME + " with user " + process.env.MYSQL_USERNAME))
    .catch(err => console.log("An error occurred while connecting to database: " + err));

app.use(cors());
app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());
app.use(fileUpload({createParentPath: true}));

// Routes that doesn't need authentication
app.use("/auth", require("./routes/auth"));

// At this point, we have a valid token, so we can add the protected routes
app.use(require("./middlewares/verifyToken"));

app.use("/user", require("./routes/user"));
app.use("/gift", require("./routes/gift"));
app.use("/apikey", require("./routes/apikey"));
app.use("/media", require("./routes/media"));
app.use("/link", require("./routes/link"));
app.use("/article", require("./routes/article"));
app.use("/shop", require("./routes/shop"));
database.sync();

app.use((req, res) => {
    res.status(404).json({message: "Endpoint not found"});
});

app.listen(process.env.SERVER_PORT || 3000);