var env = process.env;

const APP_HOST = env.APP_HOST || "127.0.0.1";
const APP_PORT = env.APP_PORT || 4000;
const DB_PATH = env.DB_PATH || "./db/users.json";

const data = require("./db.js");
const App = require('express');
const Router = require('node-async-router');

const app = App(),
      router = Router();




const fs = require( 'fs' );

const tpls = {
  index: fs.readFileSync('./index.html')+''
};
const print = function(data) {
  return tpls.index.replace('$DATA$', data)
};

router.get('ivasic', async function(req, res) {
  res.end(print('lalka'));
});


router.all('/', function(req, res) {
  res.end(print(JSON.stringify(data)));
});


var path = require('path');

var cache = {};
app.use(function (req, res, next) {
    if (req.url in cache) {
        return res.end(cache[req.url])
    }
    if (req.url.substr(-8) === '.jsx.map') {
        debugger
    }
    if (req.url.substr(-4) === '.jsx') {

        require("@babel/core").transform(
            fs.readFileSync('./public/js/view/page/export.jsx'),
            {
                "plugins": [
                    ["@babel/plugin-transform-react-jsx", {
                        "pragma": "D.h", // default pragma is React.createElement
                        "pragmaFrag": "D.f", // default is React.Fragment
                        "throwIfNamespace": false // defaults to true
                    }]
                ],
                sourceMaps: 'both',
                sourceFileName: '/js/view/page/export.jsx'
            }, function (c, d, e) {
                cache['/js/view/page/export.jsx.map'] = JSON.stringify(d.map);
                res.set('SourceMap', '/js/view/page/export.jsx.map');
                res.end(d.code)
            });
    } else {
        next();
    }
});
app.use(App.static('public'))
app.use('/', function(req, res) {
  res.end(print(JSON.stringify(data)));
});

app.listen(APP_PORT);

console.log(`LISTEN port :`+APP_PORT);
