/*
	limpador do luca0N! 3
	Copyright (C) 2020  luca0N!
	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 3 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, see .
	Contact me by e-mail via .
*/
#include "about.h"
#include "str.h"
// Because this program is currently target at Windows only, the use of ANSI colors are no longer used as of May 5, 2020.
// #include "colors.h"
#include 
#include 
#include 
#include 
// Prints the program license to the user.
int printLicense(int full){
	if (full == 0) {
		printf("%s\n", LICENSE);
		return 0;
	} else {
		FILE* flic = fopen("./LICENSE", "r");
		if (flic == NULL){
			printf("%s\n", STR_ERROR_LIC);
			return -1;
		}
		char c;
		while ((c = fgetc(flic)) != EOF) {
			printf("%c", c);
		}
	}
}
// Gets the user defined directories
void getAdditionalDirs(){
	printf("%s\n", STR_FETCHING_ADD_DIRS);
	int dirs;
	dirs = GetPrivateProfileInt("Pastas", "Pastas", 3, ".\\cfg\\pastas.ini");
	printf("%s %d\n", STR_DIR_COUNT, dirs);
	fflush(stdout);
	for(unsigned short x = 0; x < dirs; x++){
		char dirKey[7] = "Pasta";
		char* intPtr = (x + 1) + '0';
		strcat(dirKey, &intPtr);
		_TCHAR currentPath[128];
		GetPrivateProfileString("Pastas", dirKey, "null", currentPath,
			sizeof(currentPath) / sizeof(currentPath[0]), ".\\cfg\\pastas.ini");
		printf("%s [%s] %s\n", STR_FOUND_DIR, dirKey, currentPath);
		cleanDir(currentPath);
	}
}
// Cleans a directory.
void cleanDir(const char* path){
	// Path with wildcard
	char wildPath[strlen(path) + 1];
	strcpy(wildPath, path);
	strcat(wildPath, "*");
	
	printf("%s %s\n", STR_CLEANING_DIR, wildPath);
	// Fetch files in dir
	WIN32_FIND_DATA data;
	HANDLE hFind = FindFirstFile(wildPath, &data);
	unsigned int iteration = 0;
	if (hFind != INVALID_HANDLE_VALUE){
		do{
			// Ignore pseudo dirs (. and ..)
			iteration++;
			if (iteration <= 2)
				continue;
			printf("%s %s\n", STR_FOUND_ITEM, data.cFileName);
			// Attempt to delete file...
			
			int pathSize = strlen(wildPath) + strlen(data.cFileName);
			char fullPath[pathSize];
			strcpy(fullPath, path);
			strcat(fullPath, data.cFileName);
			
			if (DeleteFile(fullPath) == 0){
				printf("	%s\n", STR_FAILED_FILE);
				printf("		--> %s\n", fullPath);
				printf("		--> %#010x\n", GetLastError());
			} else
				printf("	%s\n", STR_DELETED_FILE);
		} while(FindNextFile(hFind, &data));
	} else {
		printf("%s\n", STR_FAILED_DIR_LIST);
	}
}
int main(void){
	SetConsoleOutputCP(CP_UTF8);
	printLicense(0);
	printf("%s\n%s %d, %s\n", STR_LN, PROGRAM_NAME, PROGRAM_SEASON, PROGRAM_VERSION);
	printf("%s\n%s\n\n", PROGRAM_COPYRIGHT, STR_LN);
	printf("%s\n", STR_USE_WARNING);
	char in;
	fflush(stdout);
	scanf("%c", &in);
	if (in == 'w' || in == 'c')
		if (printLicense(1) != 0)
			return -2;
	if (in != 's' && in != 'S' && in != 'y' && in != 'Y')
		return 0;
	getAdditionalDirs();
	return 0;
}