import express from "express"

import {app} from "./app"
import {config} from "./config"

import * as VersionResource from "./resources/versionResource"
import * as StatisticsResource from "./resources/statisticsResource"
import * as FrontendResource from "./resources/frontendResource"
import * as NodeResource from "./resources/nodeResource"
import * as MonitoringResource from "./resources/monitoringResource"
import * as TaskResource from "./resources/taskResource"
import * as MailResource from "./resources/mailResource"

export function init (): void {
    const router = express.Router();

    router.post('/', FrontendResource.render);

    router.get('/api/version', VersionResource.get);

    router.post('/api/node', NodeResource.create);
    router.put('/api/node/:token', NodeResource.update);
    router.delete('/api/node/:token', NodeResource.remove);
    router.get('/api/node/:token', NodeResource.get);

    router.put('/api/monitoring/confirm/:token', MonitoringResource.confirm);
    router.put('/api/monitoring/disable/:token', MonitoringResource.disable);

    router.get('/internal/api/statistics', StatisticsResource.get);

    router.get('/internal/api/tasks', TaskResource.getAll);
    router.put('/internal/api/tasks/run/:id', TaskResource.run);
    router.put('/internal/api/tasks/enable/:id', TaskResource.enable);
    router.put('/internal/api/tasks/disable/:id', TaskResource.disable);

    router.get('/internal/api/monitoring', MonitoringResource.getAll);

    router.get('/internal/api/mails', MailResource.getAll);
    router.get('/internal/api/mails/:id', MailResource.get);
    router.delete('/internal/api/mails/:id', MailResource.remove);
    router.put('/internal/api/mails/reset/:id', MailResource.resetFailures);

    router.put('/internal/api/nodes/:token', NodeResource.update);
    router.delete('/internal/api/nodes/:token', NodeResource.remove);
    router.get('/internal/api/nodes', NodeResource.getAll);
    router.get('/internal/api/nodes/:token', NodeResource.get);

    app.use(config.server.rootPath, router);
}