#include "game/LevelList.h"

#include <stdlib.h>

#include "game/Level.h"
#include "shell/Shell.h"
#include "utilities/IOUtilities.h"
#include "utilities/JSONParser.h"

LevelList * LevelList_fromJSON(JSONNode * node) {
	LevelList * self;
	unsigned int nodeIndex;
	JSONNode * levelNode;
	
	if (node == NULL) {
		return NULL;
	}
	
	self = malloc(sizeof(LevelList));
	self->levelCount = 0;
	self->levels = malloc(sizeof(Level *) * node->numberOfChildren);
	
	for (nodeIndex = 0; nodeIndex < node->numberOfChildren; nodeIndex++) {
		levelNode = NULL;
		self->levels[nodeIndex] = NULL;
		
		levelNode = jsonFromFile(resourcePath(node->children[nodeIndex].value.string));
		if (levelNode != NULL) {
			self->levels[nodeIndex] = Level_fromJSON(levelNode);
		}
		
		if (self->levels[nodeIndex] == NULL) {
			LevelList_dispose(self);
			return NULL;
		}
		
		self->levelCount++;
	}
	
	return self;
}

void LevelList_dispose(LevelList * self) {
	unsigned int levelIndex;
	
	for (levelIndex = 0; levelIndex < self->levelCount; levelIndex++) {
		Level_dispose(self->levels[levelIndex]);
	}
	free(self->levels);
	free(self);
}
