#include "StringHistory.h"
#include <stdio.h>
#include <string.h>

StringHistory *createStringHistory(int i) {
	StringHistory *sh = malloc(sizeof(StringHistory));
	if(sh == NULL) {
		return NULL;
	}
	sh->maxStringCount = i;
	sh->nextStringCount = 0;
	sh->string = NULL;
	return sh;
}

void add(StringHistory *sh, char *str) {
	if(sh->nextStringCount == sh->maxStringCount) {
		free(sh->string[0]);
		int i;
		for(i = 0; i < sh->maxStringCount-1; i++) {
			sh->string[i] = sh->string[i+1];
		}
		sh->nextStringCount--;
	}
	sh->string = realloc(sh->string, (sh->nextStringCount+1) * sizeof(char *));
	sh->string[sh->nextStringCount] = malloc(sizeof(char)*strlen(str));
	strcpy(sh->string[sh->nextStringCount], str);
	sh->nextStringCount++;
}

void clear(StringHistory *sh) {
	int i;
	for(i = 0; i < sh->nextStringCount; i++) {
		free(sh->string[i]);
	}
	free(sh->string);
	sh->string = NULL;
	sh->nextStringCount = 0;
}

void setStringCount(StringHistory *sh, int i) {
	if(sh->nextStringCount > i) {
		int j;
		int k = sh->nextStringCount-i;
		for(j = 0; j < k; j++) {
			free(sh->string[j]);
		}
		for(j = 0; j < i; j++) {
			sh->string[j] = sh->string[j+k];
		}
		sh->string = realloc(sh->string, i * sizeof(char *));
		sh->nextStringCount = i;
	}
	sh->maxStringCount = i;
}

void deleteStringHistory(StringHistory *sh) {
	clear(sh);
	free(sh->string);
	free(sh);
}

void printStringHistory(StringHistory *sh) {
	printf("PRINT STRINGHISTORY\n");
	printf("max Size: %d\n", sh->maxStringCount);
	printf("current Size: %d\n", sh->nextStringCount);
	int i;
	for(i = 0; i < sh->nextStringCount; i++) {
		printf("string %d: %s\n", i, sh->string[i]);
	}
	printf("\n");
}
