#include "homedir.h"

void setup_homedir(void){
	char dirname[250];
	char name_tmp[250];
	
	DIR *dirptr;
	FILE *out;
	int ret_val = 0;

#ifndef WIN32
	strcpy(dirname, (const char *)getenv("HOME") );
	if(dirname == NULL){
		printf("%s: getenv - %s\n", program_invocation, strerror(errno) );
		printf("failed to get $HOME environment variable, exiting!\n");
		exit(1);
	}
	strcat(dirname, "/.lsbench");
#else
	ExpandEnvironmentStrings("%userprofile%",dirname,250);
	//DWORD WINAPI GetLastError(void); no thanks
	strcat(dirname, "\lsbench");
#endif
	dirptr = opendir((const char *)dirname);
	if(dirptr == NULL){
		printf("%s: opendir - %s\n", program_invocation, strerror(errno) );
		printf("creating lsbench local dir: %s\n", dirname);

#ifdef WIN32
		ret_val = _mkdir((const char *)dirname); //returns 0 for success
		//CreateDirectory( name, NULL ); //returns 0 for failure
		if(ret_val != 0){
			//ret_val = SetFileAttributes( dirname, FILE_ATTRIBUTE_HIDDEN ); //returns 0 for failure
			//}else{
			printf("%s: _mkdir - %s\n", program_invocation, strerror(errno) );
			printf("Error: cannot create directory, exiting!\n");
			exit(1);
		}

		//if(ret_val == 0){
		//	printf("%s: SetFileAttributes - %s\n", program_invocation, strerror(errno) );
		//	printf("Error: cannot create directory, exiting!\n");
		//	exit(1);
		//}
#else
		ret_val = mkdir((const char *)dirname, S_IRWXU | S_IRGRP | S_IROTH | S_IXGRP | S_IXOTH); //returns 0 for success
		if(ret_val != 0){
			printf("%s: mkdir - %s\n", program_invocation, strerror(errno) );
			printf("Error: cannot create directory %s , exiting!\n");
			exit(1);
		}
#endif
	}else{
		if( closedir(dirptr) != 0){
			printf("%s: closedir - %s\n", program_invocation, strerror(errno) );
			printf("Error: cannot close directory %s, exiting!\n", dirname);
			exit(1);
		}

	}

	//check for conf file
#ifdef WIN32
	strcpy(name_tmp, dirname);
	strcat(name_tmp, "\lsbench.conf");
#else
	strcpy(name_tmp, dirname);
	strcat(name_tmp, "/lsbench.conf");
#endif

	if( out = fopen(name_tmp, "r") ){
		if(fclose(out) != 0){
			printf("%s: fclose - %s\n", program_invocation, strerror(errno) );
			printf("Error: cannot close file %s , exiting!\n", name_tmp);
			exit(1);
		}
	}else{
		//create it
		if( ( out = fopen( name_tmp, "w" ) ) == NULL ) {
			printf("%s: fopen - %s\n", program_invocation, strerror(errno) );
			printf("Error: cannot create file %s , exiting!\n", name_tmp);
			exit(1);
		}
		if(fprintf(out, "PORT: 3940\n") < 0 ){
			printf("%s: fprintf - %s\n", program_invocation, strerror(errno) );
			printf("Error: cannot write to file %s , exiting!\n", name_tmp);
			exit(1);
		}
		if(fclose(out) != 0){
			printf("%s: fclose - %s\n", program_invocation, strerror(errno) );
			printf("Error: cannot close file %s , exiting!\n", name_tmp);
			exit(1);
		}
	}	
	
	//main dir exists already, check for subdir now
	//dirname[strlen(dirname)-strlen("/lsbench.conf")-1] = '\0';


	strcat(dirname, "/cache");
	dirptr = opendir((const char *)dirname);
	if(dirptr == NULL){
		printf("%s: opendir - %s\n", program_invocation, strerror(errno) );
		printf("creating directory: %s\n", dirname);
#ifdef _WIN32
		ret_val = _mkdir((const char *)dirname); //returns 0 for success
		if(ret_val != 0){
			//ret_val = SetFileAttributes( &dirname, FILE_ATTRIBUTE_HIDDEN ); //returns 0 for failure
			//}else{
			printf("%s: _mkdir - %s\n", program_invocation, strerror(errno) );
			printf("Error: cannot create directory, exiting!\n");
			exit(1);
		}
		//if(ret_val == 0){
		//	printf("%s: SetFileAttributes - %s\n", program_invocation, strerror(errno) );
		//	printf("Error: cannot create directory, exiting!\n");
		//	exit(1);
		//}
#else
		ret_val = mkdir((const char *)dirname, S_IRWXU | S_IRGRP | S_IROTH | S_IXGRP | S_IXOTH); //returns 0 for success
		if(ret_val != 0){
			printf("%s: mkdir - %s\n", program_invocation, strerror(errno) );
			printf("Error: cannot create directory %s, exiting!\n", dirname);
			exit(1);
		}
#endif
	}else{
		//unistd.h
		//int access(const char *path, int amode); //returns 0 for success

		if( closedir(dirptr) != 0){
			printf("%s: closedir - %s\n", program_invocation, strerror(errno) );
			printf("Error: cannot close directory %s, exiting!\n", dirname);
			exit(1);
		}
	}
}
