
#include <SDL/SDL.h>

#include "logger_helpers.h"

/*!
 * Helper functions. Turns the given integer in to a string
 *
 * Note: uses static buffer internally, so the return value
 * isn't valid after the next call of this function. If you
 * want to retain the return value, make a copy of it
 *
 *  \param integer The converted integer
 *  \returns Given integer as string
 */
char *IntToString(const int integer) {
	static char buffer[256]; // malloc might work better
	memset(buffer, 0, sizeof(buffer));

	SDL_snprintf(buffer, sizeof(buffer), "%d", integer);

	return buffer;
}

/*!
 * Helper functions. Turns the given double value in to a string
 *
 * Note: uses static buffer internally, so the return value
 * isn't valid after the next call of this function. If you
 * want to retain the return value, make a copy of it
 *
 * \param decimal The converted double value
 * \returns Given double value as string
 */
char *DoubleToString(const double decimal) {
	static char buffer[256]; // malloc might work better
	memset(buffer, 0, sizeof(buffer));

	SDL_snprintf(buffer, sizeof(buffer), "%.5f", decimal);

	return buffer;
}

/*!
 * Converts unix timestamp to its ascii presentation
 *
 * Note: uses static buffer internally, so the return value
 * isn't valid after the next call of this function. If you
 * want to retain the return value, make a copy of it
 *
 * \param timestamp Timestamp
 * \return Ascii presentation
 */
char *TimestampToString(const time_t timestamp) {
	static char buffer[256];
	memset(buffer, 0, sizeof(buffer));

	time_t copy = timestamp;

	struct tm *local = localtime(&copy);
	strftime(buffer, sizeof(buffer), "%a %Y-%m-%d %H:%M:%S %Z", local);

	return buffer;
}

/*! Turns all the characters of the given
 * string to lowercase and returns the resulting string.
 *
 * \param string String to be converted
 * \return Newly allocated lower-case version of the given string
 */
char *
ToLowerCase(const char *string)
{
	if(ValidateString(string) == 0) {
		return NULL;
	}

	const int size = SDL_strlen(string);
	char *ret = SDL_malloc(size + 1);
	strncpy(ret, string, size);
	ret[size] = '\0';

	int counter = 0;
	for(; counter < size; ++counter) {
		ret[counter] = tolower(ret[counter]);
	}

	// printf("Debug: %s == %s\n", string, ret);

	return ret;
}

/*!
 * Validates string by checking that given string is not
 * NULL, its length is non-zero etc.
 *
 * \param string Validated string
 * \returns 1 if string is valid, otherwise 0
 */
int
ValidateString(const char *string)
{
	int retVal = 1;

	if(string != NULL) {
		if(SDL_strlen(string) > 0) {
			retVal = 1;
		}

		retVal = 1;
	} else {
		retVal = 0;
	}

	return retVal;
}


