// OwlBoard - © Fred Boniface 2022 - Licensed under GPLv3 (or later)

// Please see the included LICENSE file.  Statically served fonts are
// licensed separately, each folder contains a license file where a 
// different license applies.

// External Requires
const express  = require('express');
const app      = express();

// Internal Requires
const log      = require('./src/utils/log.utils');          // Log Helper
const version  = require('./src/configs/version.configs');  // Version Strings
const listRtr  = require('./src/routes/list.routes');       // /list endpoints
const ldbRtr   = require('./src/routes/ldb.routes');        // /ldb endpoints
const kubeRtr  = require('./src/routes/kube.routes');       // /kube endpoints
const findRtr  = require('./src/routes/find.routes');       // /find endpoints
const initDb   = require('./src/utils/dbinit.utils');       // DB Init Utility

// Set Server Configurations
const srvListen = process.env.OWL_SRV_LISTEN || "0.0.0.0"
const srvPort   = process.env.OWL_SRV_PORT || 8460

// Print version number:
log.out(`app: Starting OwlBoard - App Version: ${version.app} - API versions: ${version.api}`);

// Test for required vars:
    // const varTest = require('./src/utils/varTest.utils');
    // var startTest = await varTest.varTest();
      //console.log("Required Vars Missing:", startTest.missing_required);
      //console.log("Desired Vars Missing:", startTest.missing_desired);
        // if startTest.pass == false
          // console.log("Unable to start, missing required vars")
          // exit app

// DB Init
initDb.init();

// Express Error Handling:
app.use((err, req, res, next) => {
  const statusCode = err.statuscode || 500;
  console.error(err.message, err.stack);
  res.status(statusCode).json({'message': err.message});
  return;
});

// Express Submodules:
app.use(express.json()); //JSON Parsing for POST Requests
app.use(express.static('static')); //Serve static content from /static

// Express Routes
app.use('/api/v1/list', listRtr);
app.use('/api/v1/ldb', ldbRtr);
app.use('/api/v1/kube', kubeRtr);
app.use('/api/v1/find', findRtr);

// Start Express
app.listen(srvPort, srvListen, (error) =>{
  if(!error) {
      log.out(`app.listen: Listening on http://${srvListen}:${srvPort}`);
      log.out("app.listen: State - alive")
  } else {
      log.out("app.listen: Error occurred, server can't start", error);
  }
});