#include "Path.h"
#include "String.h"

void Replace(STRING str, char oldValue, char newValue)
{
	int len = String::StrLen(str);
	for ( int i = 0; i < len; i++)
		if ( oldValue ==  *(i + str) ) *(i + str) = newValue;
}

STRING Path::Combine(STRING path1, STRING path2)
{
	//check that path1 ends with PATH_SEPARATOR

	//if not -  append it
	
	UINT path1Length = String::StrLen(path1);
	UINT path2Length = String::StrLen(path2);
	bool appendPathSeparator = ( *PATH_SEPARATOR != *(path1 + path1Length - 1));
	
	STRING result = (STRING)System::SafeAllocMemory(path1Length + path2Length + 2);
	if ( 0 == result )
		return 0;
	String::StrCpy(result, path1);
	if ( appendPathSeparator )
	{
		String::StrCat(result,PATH_SEPARATOR);
	}
	STRING tmpPath2 = String::StrDup(path2);
	//replace other system's path separators with current
#ifdef WINDOWS
	Replace(tmpPath2,*PATH_SEPARATOR_NIX_A, *PATH_SEPARATOR);
#else
	Replace(tmpPath2, *PATH_SEPARATOR_WIN_A, *PATH_SEPARATOR);
#endif
	String::StrCat(result, tmpPath2);
	System::SafeFreeMemory(tmpPath2);
	return result;
}


STRING Path::GetFileFolder(STRING filePath)
{
	UINT len = String::StrLen(filePath);
	while( len-- > 1)
		if ( *PATH_SEPARATOR == *(filePath + len - 1) )
			break;
	if ( 0 != len )
	{
		STRING result = (STRING)System::SafeAllocMemory(len + 1);
		String::StrNCpy(result, filePath, len);
		return result;
	}
	else
		return 0;
}

bool Path::IsDirectory(STRING path)
{
	if ( 0 == path)
		return 0;
	UINT len = String::StrLen(path);
	return  (*PATH_SEPARATOR == *(path + len - 1) );
		
}

STRING Path::GetFileDirectory(STRING filePath){
	if ( 0 == filePath )
		return 0;
	if ( IsDirectory(filePath) )
		return String::StrDup(filePath);
	else {
		UINT lastDelimiterIndx = String::LastIndexOf(PATH_SEPARATOR, filePath);
		if ( lastDelimiterIndx == -1)
			return 0;
		STRING directory = (STRING)System::SafeAllocMemory(lastDelimiterIndx + 2 ); //+1 for ending 0, +1 for path_separator
		String::StrNCpy(directory,filePath, lastDelimiterIndx + 1);
		return directory;
	}
}
