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

import express from "express";
import cors from "cors";
import {loadLandingPage, loadConformance, loadCollections, loadSubCollections} from "./src/Ogc3D";
import {mapError} from "./src/ErrorHandler";

const app = express();
app.use(cors());
const PORT = 3001;

// Routes
app.get("/", (req, res) => {
    console.debug("Received request for Landing Page");
    res.send(loadLandingPage());
});
app.get("/conformance", (req, res) => {
    console.debug("Received request for conformance");
    res.send(loadConformance());
});
app.get("/collections", (req, res) => {
    console.debug("Received request for collections");
    res.send(loadCollections());
});

app.get("/collections/*", (req, res) => {
    console.debug("Received request for subcollections");
    const subCollections = req.params[0].split("/").filter(val => !!val);
    res.send(loadSubCollections(subCollections, req.query.format as string | undefined));
});

// Error Handling
// noinspection JSUnusedLocalSymbols
app.use(function (err: Error, req: Request, res: Response, next: NextFunction) {
    const errorResponse = mapError(err);
    res.status(errorResponse.status).send(errorResponse);
});

app.use("/public",express.static("public"));


// Start Application
app.listen(PORT, () => {
    console.log(`⚡️[server]: Server is running at http://localhost:${PORT}`);
});