var ini = require('ini');
var path = require('path');
var fs = require('fs');
var logger = require('./logger');
var common = require('../common');

exports.getRTLConfig = (req, res, next) => {
  var RTLConfFile = common.rtl_conf_file_path + '/RTL.conf';
  logger.info('\r\nConf: 7: ' + JSON.stringify(Date.now()) + ': INFO: Getting RTL Config');
  fs.readFile(RTLConfFile, 'utf8', function(err, data) {
    if (err) {
      logger.error('\r\nConf: 10: ' + JSON.stringify(Date.now()) + ': ERROR: Getting RTL Config Failed!');
      res.status(500).json({
        message: "Reading RTL Config Failed!",
        error: err
      });
    } else {
      const jsonConfig = ini.parse(data);
      authSettings = {
        nodeAuthType: common.node_auth_type,
        lndConfigPath: common.lnd_config_path,
        bitcoindConfigPath: common.bitcoind_config_path,
        rtlSSO: common.rtl_sso,
        logoutRedirectLink: common.logout_redirect_link
      };
      res.status(200).json({settings: jsonConfig.Settings, authSettings: authSettings});
    }
  });
};

exports.updateUISettings = (req, res, next) => {
  var RTLConfFile = common.rtl_conf_file_path + '/RTL.conf';
  var config = ini.parse(fs.readFileSync(RTLConfFile, 'utf-8'));
  delete config.Settings;
  fs.writeFileSync(RTLConfFile, ini.stringify(config));
  fs.appendFile(RTLConfFile, ini.stringify(req.body.updatedSettings, { section: 'Settings' }), function(err) {
    if (err) {
      logger.error('\r\nConf: 28: ' + JSON.stringify(Date.now()) + ': ERROR: Updating UI Settings Failed!');
      res.status(500).json({
        message: "Updating UI Settings Failed!",
        error: 'Updating UI Settings Failed!'
      });
    } else {
      logger.info('\r\nConf: 34: ' + JSON.stringify(Date.now()) + ': INFO: Updating UI Settings Succesful!');
      res.status(201).json({message: 'UI Settings Updated Successfully'});
    }
  });
};

exports.getConfig = (req, res, next) => {
  let confFile = '';
  switch (req.params.nodeType) {
    case 'lnd':
      confFile = common.lnd_config_path
      break;
    case 'bitcoind':
      confFile = common.bitcoind_config_path
      break;
    case 'rtl':
      confFile = common.rtl_conf_file_path + '/RTL.conf';
      break;
    default:
      confFile = '';
      break;
  }
  logger.info('\r\nConf: 43: ' + JSON.stringify(Date.now()) + ': INFO: Node Type: ' + req.params.nodeType + ', File Path: ' + confFile);
  fs.readFile(confFile, 'utf8', function(err, data) {
    if (err) {
      logger.error('\r\nConf: 59: ' + JSON.stringify(Date.now()) + ': ERROR: Reading Conf Failed!');
      res.status(500).json({
        message: "Reading Config File Failed!",
        error: err
      });
    } else {
      const jsonConfig = ini.parse(data);
      if (undefined !== jsonConfig.Authentication && undefined !== jsonConfig.Authentication.rtlPass) {
        jsonConfig.Authentication.rtlPass = jsonConfig.Authentication.rtlPass.replace(/./g, '*');
      }
      if (undefined !== jsonConfig.Bitcoind && undefined !== jsonConfig.Bitcoind['bitcoind.rpcpass']) {
        jsonConfig.Bitcoind['bitcoind.rpcpass'] = jsonConfig.Bitcoind['bitcoind.rpcpass'].replace(/./g, '*');
      }
      res.status(200).json(ini.stringify(jsonConfig));
    }
  });
};
