const jsonServer = require('json-server');
const clusters = require('./payload/clusters.json');
const brokers = require('./payload/brokers.json');
const brokerMetrics = require('./payload/brokerMetrics.json');
const topics = require('./payload/topics.json');
const topicDetails = require('./payload/topicDetails.json');
const topicConfigs = require('./payload/topicConfigs.json');
const consumerGroups = require('./payload/consumerGroups.json');
const consumerGroupDetails = require('./payload/consumerGroupDetails.json');

const db = {
    clusters,
    brokers,
    brokerMetrics: brokerMetrics.map(({clusterName, ...rest}) => ({...rest, id: clusterName})),
    topics: topics.map((topic) => ({...topic, id: topic.name})),
    topicDetails,
    topicConfigs,
    consumerGroups: consumerGroups.map((group) => ({...group, id: group.consumerGroupId})),
    consumerGroupDetails
};
const server = jsonServer.create();
const router = jsonServer.router(db);
const middlewares = jsonServer.defaults();

const PORT = 3004;
const DELAY = 0;

server.use(middlewares);
server.use((_req, _res, next) => {
  setTimeout(next, DELAY);
});

server.use(
  jsonServer.rewriter({
    '/api/*': '/$1',
    '/clusters/:clusterName/metrics/broker': '/brokerMetrics/:clusterName',
    '/clusters/:clusterName/topics/:id': '/topicDetails',
    '/clusters/:clusterName/topics/:id/config': '/topicConfigs',
    '/clusters/:clusterName/consumer-groups/:id': '/consumerGroupDetails',
  })
);

server.use(router);

server.listen(PORT, () => {
  console.log('JSON Server is running');
});