#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include "arbre.h"

void clearInputBuffer() // works only if the input buffer is not empty
{
    int c;
    do 
    {
        c = getchar();
    } while (c != '\n' && c != EOF);
}

void pause()
{
    printf("\nAppuyez sur ENTREE pour continuer...\n");
    getchar();
}
void bonjour(){
    system("clear");
    printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
    printf("\nBonjour et bienvenue dans le projet de Programmation Avancée IMA 3\n\n");
    printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n");
}


void test_arguments(int argc, char *argv[],char mot_dico[20], char mot_fichier[20]){
    if(argc <2){     
        printf("Vous n'avez pas entrée de dictionnaire ainsi que de fichier\n");
        printf("Veuillez entrez votre nom de dictionnaire\n");
        scanf("%s",mot_dico);
        printf("\n\n");
        printf("Veuillez entrez votre nom de fichier\n");
        scanf("%s",mot_fichier);
        printf("\n\n");
    }
    else if(argc <3){
        printf("Vous n'avez pas entrée de fichier\n");
        printf("Veuillez entrez votre nom de fichier\n");
        scanf("%s",mot_fichier);
        printf("\n\n");
    }
}

void lire_dico(int argc, char *argv[],char mot_dico[20], char mot_fichier[20],Dico* mondico,FILE* dico){
    printf("==================================================================\n");
    if(argc >1){
        printf("chargement de votre dictionnaire \n");
        printf("nom: %s\n",argv[1]);
        dico=fopen(argv[1],"r"); 
    }
    else {
        printf("chargement de votre dictionnaire \n");
        printf("nom: %s\n",mot_dico);
        dico=fopen(mot_dico,"r");
    }
//     else dico=fopen("words-no-accents","r");
    
  	if(dico == NULL){
        printf("Nous avons pas compris votre demande.\nNous vous chargeons le dictionnaire par default\n");
        printf("nom du dico: words-no-accents\n");
        dico=fopen("words-no-accents","r");
    }
  	
  	
    
    charger_dico(dico,&mondico);
//     affiche_dico(mondico);
    fclose(dico); 
    printf("==================================================================\n\n\n");
}

void lire_fichier(int argc, char *argv[],char mot_fichier[20],Dico* mondico,FILE** fichier_utilisateur){
    printf("##################################################################\n");
    if(argc >2){
        printf("Ouverture de votre fichier: %s \n",argv[2]);
        *fichier_utilisateur=fopen(argv[2],"r"); 
    }
    else {
        printf("Ouverture de votre fichier: %s \n",mot_fichier);
        *fichier_utilisateur=fopen(mot_fichier,"r"); 
    
    }
    if (fichier_utilisateur==NULL){
        printf("Nous avons pas reussi à ouvrir le fichier\n");
    }
    printf("##################################################################\n");
    
}

void fin(Dico* mondico){
    printf("\n\n\nLe programme est fini, vous pouvez relancer une execution\nCommande: ./executable NOM-DICO NOM-FICHIER\n\nA bientôt\n");
    free_dico(mondico);    
}

void test_fichier(Dico* mondico,FILE* fichier_utilisateur){
    if (fichier_utilisateur!=NULL){
         printf("\n\n¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤\n");
        printf("analyse en cours\n\n");
         int juste=0;
         int faux=0;
         analyse_fichier(fichier_utilisateur,mondico,&juste,&faux);
         printf("Votre fichier contient %d de mots, dont %d justes et %d faux.\n",juste+faux,juste,faux);
         printf("¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤\n");
         pause();
     }
}




int main (int argc,char *argv[]){
    FILE* dico = NULL;
    char mot_dico[20]; //opti
    char mot_fichier[20];
    FILE* fichier_utilisateur = NULL;
    struct dico mondico;
    
    
    bonjour();
    
    pause();
    
    test_arguments(argc,argv,mot_dico,mot_fichier);
        
    lire_dico(argc,argv,mot_dico,mot_fichier,&mondico,dico);
    
    clearInputBuffer();
    pause();

    lire_fichier(argc,argv,mot_fichier,&mondico,&fichier_utilisateur);
    
        
    pause(); 
    
    test_fichier(&mondico,fichier_utilisateur);
    
    
    if (fichier_utilisateur!=NULL){
        fclose(fichier_utilisateur);
    }
    fin(&mondico);    
    return 0;
}
