const express = require('express');
const router = express.Router();
const errMng = require('../../includes/errorManager');
const so = require('../../includes/storeObject');
const mysql = require('../../libs/mysql_pool');

router
    .get('/', (req, res) => {
        res.send({ name: 'WebIO API System' });
    })
    .all('*', (req,res,n)=>{
        if('x-auth-token' in req.headers) {
            let token = req.headers['x-auth-token'];
            if(so.chkKey(token)){
                let obj = so.get(token);
                if(obj != null) {
                    so.set(token, obj);
                }
            }
        }
        n();
    })
    .get('/showallso', (req,res)=>{
        res.send(so.show());
    })
    .use('/system', require('./system.js'))
    .use('/log', require('./log.js'))
    .use('/leone', require('./leone.js'))
    .use('/iogroup', require('./iogroup.js'))
    .use('/iocmd', require('./iocmd.js'))
    .use('/schedule', require('./schedule.js'))
    .use('/dio', require('./dio.js'))
    .use('/link', require('./link.js'))
    .use('/modbus', require('./modbus.js'))
    .use('/ipcam', require('./ipcam.js'))
    .use('/wristband', require('./wristband.js'));

// api error handler
router.use((err, req, res, n) => {
	if ('db' in res && typeof res.db == 'object' && 'close' in res.db && typeof res.db.close == 'function') res.db.close();
    if ('db' in res && typeof res.db == 'object' && 'release' in res.db && typeof res.db.release == 'function') res.db.release();

    let lngs = req.headers['accept-language'] || '';
    lngs = lngs.split(',');
    let lng = null;
    if (lngs.length > 0) {
        lng = lngs[0].substring(0, 2);
    }
    let json = {
        errorCode: (typeof err != 'string' ? err.toString() : err),
        message: errMng(err, lng),
        status: 0
    };

    if('sys_err' in res && process.env.NODE_ENV != 'production') json.sys_err = res.sys_err;

    res.send(json);
})

module.exports = router;