/*
Copyright (C) 2015-2019 Parallel Realities

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, or (at your option) any later version.

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.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

*/

#include "io.h"

int fileExists(char *filename)
{
	struct stat buffer;

	return (stat(filename, &buffer) == 0);
}

char *getFileLocation(char *filename)
{
	static char path[MAX_FILENAME_LENGTH];
	memset(path, '\0', MAX_FILENAME_LENGTH);

	if (fileExists(filename))
	{
		return filename;
	}

	sprintf(path, DATA_DIR"/%s", filename);

	return path;
}

char *readFile(char *filename)
{
	char *buffer;
	long length;
	FILE *file;

	file = fopen(getFileLocation(filename), "rb");

	if (file)
	{
		fseek(file, 0, SEEK_END);
		length = ftell(file);
		fseek(file, 0, SEEK_SET);

		buffer = malloc(length);
		memset(buffer, 0, length);
		fread(buffer, 1, length, file);

		fclose(file);
	}

	return buffer;
}

int writeFile(char *filename, char *data)
{
	FILE *file = fopen(filename, "wb");

	if (file)
	{
		fprintf(file, "%s\n", data);
		fclose(file);
		return 1;
	}

	return 0;
}

char *getSaveFilePath(char *filename)
{
	static char path[MAX_PATH_LENGTH];
	memset(path, '\0', MAX_PATH_LENGTH);

	sprintf(path, "%s/%s", app.saveDir, filename);

	SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_DEBUG, "getSaveFilePath = '%s'", path);

	return path;
}

char **getFileList(char *dir, int *count)
{
	DIR *d;
	int i;
	struct dirent *ent;
	char **filenames;

	i = 0;
	filenames = NULL;

	if ((d = opendir(getFileLocation(dir))) != NULL)
	{
		while ((ent = readdir(d)) != NULL)
		{
			if (ent->d_name[0] != '.')
			{
				i++;
			}
		}

		if (i > 0)
		{
			filenames = malloc(sizeof(char*) * i);
			memset(filenames, 0, sizeof(char*) * i);

			rewinddir(d);

			i = 0;

			while ((ent = readdir(d)) != NULL)
			{
				if (ent->d_name[0] != '.')
				{
					filenames[i] = malloc(sizeof(char) * MAX_FILENAME_LENGTH);

					STRNCPY(filenames[i], ent->d_name, MAX_FILENAME_LENGTH);

					i++;
				}
			}
		}

		closedir(d);
	}

	*count = i;

	if (filenames)
	{
		qsort(filenames, i, sizeof(char*), stringComparator);
	}

	return filenames;
}
