/* FILENAME      : TNavConfig.cpp
 * AUTHOR        : Henthorn
 * DATE          : 02/06/17
 * DESCRIPTION   : TNavConfig is designed to be a singleton in the::TNavConfig()
 {
   
 }

 *                 TerrainNav app. Clean method for components to access
 *                 configuration items. 
 * DEPENDENCIES  : TerrainNav.h
 * -----------------------------------------------------------------------------
 * Modification History
 * -----------------------------------------------------------------------------
 *    
 ******************************************************************************/

#include <string.h>
#include <stdlib.h>
#include "myOutput.h"
#include "TNavConfig.h"


TNavConfig::TNavConfig()
{
   _mapFile = _particlesFile = _vehicleSpecsFile = _logDir = NULL;
   setParticlesFile("particles.cfg");          // default name
}

TNavConfig::~TNavConfig()
{
   if (_particlesFile) free(_particlesFile);
   if (_mapFile) free(_mapFile);
   if (_vehicleSpecsFile) free(_vehicleSpecsFile);
   if (_logDir) free(_logDir);
}

void TNavConfig::setMapFile(char *filename)
{
   if (filename)
   {
      if (_mapFile) free(_mapFile);
      _mapFile = strdup(filename);
      output("TNavConfig::setMapFile: value is now %s\n", _mapFile);
   }
   else
   {
      output("TNavConfig::setMapFile: NULL passed in! Retaining value of %s\n",
         _mapFile? _mapFile : "NULL");
   }
}

char* TNavConfig::getMapFile()
{
   char *cp = _mapFile? strdup(_mapFile) : NULL;
   return cp;
}

void TNavConfig::setVehicleSpecsFile(char *filename)
{
   if (filename)
   {
      if (_vehicleSpecsFile) free(_vehicleSpecsFile);
      _vehicleSpecsFile = strdup(filename);
      output("TNavConfig::setVehicleSpecsFile: value is now %s\n",
         _vehicleSpecsFile);
   }
   else
   {
      output("setVehicleSpecsFile: NULL passed in! Retaining value of %s\n",
         _vehicleSpecsFile? _vehicleSpecsFile : "NULL");
   }
}

char* TNavConfig::getVehicleSpecsFile()
{
   char *cp = _vehicleSpecsFile? strdup(_vehicleSpecsFile) : NULL;
   return cp;
}

void TNavConfig::setParticlesFile(char *filename)
{
   if (filename)
   {
      if (_particlesFile) free(_particlesFile);
      _particlesFile = strdup(filename);
      output("TNavConfig::setParticlesFile: value is now %s\n", _particlesFile);
   }
   else
   {
      output("setParticlesFile: NULL passed in! Retaining value of %s\n",
         _particlesFile? _particlesFile : "NULL");
   }
}

char* TNavConfig::getParticlesFile()
{
// copy is needed b/c it can change dynamically
// caller owns return value - must free it
   char *cp = _particlesFile? strdup(_particlesFile) : NULL; 
   return cp;
}

void TNavConfig::setLogDir(char *filename)
{
   if (filename)
   {
      if (_logDir) free(_logDir);
      _logDir = strdup(filename);
      output("TNavConfig::setLogDir: value is now %s\n", _logDir);
   }
   else
   {
      output("setLogDir: NULL passed in! Retaining value of %s\n",
         _logDir? _logDir : "NULL");
   }
}

char* TNavConfig::getLogDir()
{
   char *cp = _logDir? strdup(_logDir) : NULL;
   return cp;
}
