#include "vigenere.h"

int cryptVigenere(const char *key, const char *fileSrc, const int numberCharacters, char *bufferDst) {
	int error = 0;
	char matrice[SIZE_MATRICE_VIGENERE][SIZE_MATRICE_VIGENERE];
	char *data = malloc(sizeof(char) * numberCharacters);
	char *dataVigenere = NULL;
	char c = 0;
	int pos = 0;
	size_t i, j = 0;
	size_t keyLength = strlen(key);

	// Init the Vigenere matrice
	matriceVigenere(matrice);

	if (data == NULL) return -1;
	memset(data, 0, numberCharacters);

	error = copyFile(fileSrc, data);
	
	dataVigenere = malloc(strlen(data));
	if (dataVigenere == NULL) return -1;

	memset(dataVigenere, 0, numberCharacters);

	// Fill the dataVigenere with the key
	for (i = 0; i < strlen(data); i++){
		if (data[i] == '\n' || data[i] == ' ')
			dataVigenere[i] = data[i];
		else
			dataVigenere[i] = key[j++];

		if (j == keyLength)
			j = 0;
	}
	dataVigenere[pos - 1] = '\0';

	printf("%s\n", data);
	printf("%s\n", dataVigenere);
	/*do {
		c = data[pos++];
		printf("%c", c);
		if (c == '\n') {}
	}while (c != '\0');*/

	/* Encrypt the data */
	/*for (i = 0; i < strlen(data); i++) {
		printf("%c", matrice[data[i]][dataVigenere[i]]);	
	}*/

	free(dataVigenere);
	free(data);
	return error;
}
void matriceVigenere(char matrice[][SIZE_MATRICE_VIGENERE]) {
	int i, j = 0;
	char pos, pos2 = 'A';

	//for (i = 0; i < SIZE_MATRICE_VIGENERE; i++)
	//	matrice[0][i] = 'A' + i;

	for (i = 0; i < SIZE_MATRICE_VIGENERE; i++) {
		for (j = 0; j < SIZE_MATRICE_VIGENERE; j++) {
			if (pos > 'Z')
				matrice[i][j] = pos2++;
			else
				matrice[i][j] = pos++;
		}
		pos = 'B' + i;
		pos2 = 'A';
	}
	for (i = 0; i < SIZE_MATRICE_VIGENERE; i++) {
		for (j = 0; j < SIZE_MATRICE_VIGENERE; j++) 
			printf("%c ", matrice[i][j]);
		printf("f\n");
	}
}