import express, {Express} from 'express';

const app: Express = express();

// Register the default middlewares
app.use(express.json());
app.use(require('../api/middlewares/error'));

/** All routes that don't require authentication */
app.use("/session", require('../api/routes/session'));

// Register the authentication middleware
app.use(require('../api/middlewares/authenticate').authenticate);

/** All routes that require authentication */
app.use("/links", require('../api/routes/links'));
app.use("/media", require('../api/routes/media'));
app.use("/guilds", require('../api/routes/guilds'));
app.use("/channels", require('../api/routes/channels'));
app.use("/user", require('../api/routes/user'));
app.use("/achievements", require('../api/routes/achievements'));

/** Logs something with an api prefix */
const log = (msg: string) => console.log(`[API] ${msg}`);

/** Starts the api server */
export const startServer = (port: number = 8671) => app.listen(port, () => log(`Listening on port ${port}`));