'use strict';

const { Router } = require('express');
const joi = require('joi');
const logger = require('../../logger')('client-api/metrics.js');

const { clientMetricsSchema } = require('./metrics-schema');

exports.router = config => {
    const { clientMetricsStore, clientInstanceStore } = config.stores;
    const router = Router();

    router.post('/', (req, res) => {
        const data = req.body;
        const clientIp = req.ip;

        joi.validate(data, clientMetricsSchema, (err, cleaned) => {
            if (err) {
                logger.warn('Invalid metrics posted', err);
                return res.status(400).json(err);
            }

            clientMetricsStore
                .insert(cleaned)
                .then(() =>
                    clientInstanceStore.insert({
                        appName: cleaned.appName,
                        instanceId: cleaned.instanceId,
                        clientIp,
                    })
                )
                .catch(err => logger.error('failed to store metrics', err));

            res.status(202).end();
        });
    });

    return router;
};