//     Pandora FMS Embedded Agent
//     (c) Artica Soluciones Tecnológicas S.L 2011
//     (c) Sancho Lerena <slerena@artica.es>

//     This program is free software; you can redistribute it and/or modify
//     it under the terms of the GNU General Public License as published by
//     the Free Software Foundation; either version 2 of the License.
//
//     This program is distributed in the hope that it will be useful,
//     but WITHOUT ANY WARRANTY; without even the implied warranty of
//     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//     GNU General Public License for more details.

//
// Config file parser module. 


#include <stdio.h>
#include <stdlib.h> 
#include <string.h>
#include <ctype.h>
#include "pandora_type.h"
#include "pandora_util.h"

#define MAXLEN 1024

// External reference to GNU asprintf, warning messages could be so nasty...:->
extern int asprintf (char **__restrict __ptr, __const char *__restrict __fmt, ...);

/*
 * initialize data to default values
 */

void
init_parameters (struct pandora_setup* pandorasetup)
{
	asprintf (&pandorasetup->logfile,"/tmp/pandora_agent.log");
	asprintf (&pandorasetup->agent_name, "localhost");
	asprintf (&pandorasetup->server_ip, "localhost");
	pandorasetup->verbosity=5;
}



int
parse_config (struct pandora_setup* pandorasetup, char *config_file)
{
	char *s, buff[MAXLEN];

	FILE *fp = fopen (config_file, "r");
  	if (fp == NULL){
    		return -1;
  	}
  	/* Read next line */
	while ((s = fgets (buff, sizeof buff, fp) )){
		/* Skip blank lines and comments */
    		if (buff[0] == '\n' || buff[0] == '#')
      			continue;

		/* Parse name/value pair from line */
    		char name[MAXLEN], value[MAXLEN];
    		s = strtok (buff, " ");

    		if (s==NULL){
      			continue;
		} else {
			strncpy (name, s, MAXLEN);
		} 
		trim (name);	// Purge blank spaces
		s = strtok (NULL, "=");

		if (s==NULL) {
      			continue;
		} else {
			strncpy (value, s, MAXLEN);
		}
    		trim (value);	// Purge blank spaces

    		/* Copy into correct entry in parameters struct */
    		if (strcmp(name, "verbosity")==0){
			pandorasetup->verbosity = atoi(value);
		}
		else if (strcmp(name, "debug")==0){
			pandorasetup->debug = atoi(value);
		}
		else if (strcmp(name, "interval")==0){
			pandorasetup->interval = atoi(value);
		}
		else if (strcmp(name, "autotime")==0){
			pandorasetup->autotime = atoi(value);
		}
		else if (strcmp(name, "remote_config")==0){
			pandorasetup->remote_config = atoi(value);
		}
		else if (strcmp(name, "server_port")==0){
			pandorasetup->server_port = atoi(value);
		}
    		else if (strcmp(name, "agent_name")==0){
			free(pandorasetup->agent_name);
			asprintf(&pandorasetup->agent_name, value);
		}
		else if (strcmp(name, "temporal")==0){
			free(pandorasetup->temporal);
			asprintf(&pandorasetup->temporal, value);
		}
		else if (strcmp(name, "server_ip")==0){
			free(pandorasetup->server_ip);
			asprintf(&pandorasetup->server_ip, value);
		}
		else if (strcmp(name, "logfile")==0){
			free(pandorasetup->logfile);
			asprintf(&pandorasetup->logfile, value);
		}

		// (TODO) do here a real config parsing.
		// This code is just a concept to read the first module_plugin entry and doesnt support blank spaces

		else if (strcmp(name, "module_plugin")==0){
			free(pandorasetup->sancho_test);
			asprintf(&pandorasetup->sancho_test, value);
		}

  	}
  	fclose (fp);
	return 0;
}