#include <string.h>
#include <vxUtils.h>
#include <stdio.h>
#include "PowerNameGenerator.h"
#include "ibcItemNames.h"

PowerNameGenerator::PowerNameGenerator(const char *systemName, 
				       const char *appName,
				       const char *outputFile)
{
  _systemName = strdup(systemName);
  _appName = strdup(appName);

  if (outputFile)
    _outputFile = strdup(outputFile);
  else
    _outputFile = 0;

}


PowerNameGenerator::~PowerNameGenerator()
{
  free(_systemName);
  free(_appName);

  free((void *)_outputFile);
}


void PowerNameGenerator::addChannel(const char *nm)
{
  char *name = strdup(nm);
  _channelNames.add((void **)&name);
}


void PowerNameGenerator::printNames()
{
  FILE *output;

  if (!_outputFile || !strlen(_outputFile))
    output = stdout;

  else {

    output = fopen(_outputFile, "w");

    if (!output) {
      fprintf(stderr, 
	      "PowerNameGenerator::printNames() -\n"
	      "Could not open file \"%s\"\n", 
	      _outputFile);
    }
  }

  char namePrefix[512];
  char dmPrefix[512];


  for (int i = 0; i < _channelNames.size(); i++) {

    char *name;
    _channelNames.get(i, (void **)&name);

    sprintf(namePrefix, "%s_%s_%s_%s_",
	    _systemName,
	    PowerMgrAppName,
	    _appName,
	    name);

    sprintf(dmPrefix, "%s.%s.%s.%s.",
	    _systemName,
	    PowerMgrAppName,
	    _appName,
	    name);

    fprintf(output, "#define %sSWITCH_REQ_DM \\\n        \"%s%s\"\n\n", 
	    namePrefix, dmPrefix, PowerSwitchReqName);

    fprintf(output, "#define %sSWITCH_STATUS_DM \\\n        \"%s%s\"\n\n", 
	    namePrefix, dmPrefix, PowerSwitchStatusName);

    fprintf(output, "#define %sPWR_REQ_DM \\\n        \"%s%s\"\n\n", 
	    namePrefix, dmPrefix, PowerMgrReqName);

    fprintf(output, "#define %sPWR_OK_DM \\\n        \"%s%s\"\n\n", 
	    namePrefix, dmPrefix, PowerMgrOkName);

    fprintf(output, "\n");
  }

  if (output != stderr && output != stdout)
    fclose(output);
}
