int main()
{
	SetConsoleTitle(MultiCharToUniChar("DOULCIER_MARCINKOWSKI  -  Projet ACCELL"));

	clock_t start;
	clock_t end;
    double elapsed;

	// Lancement de la mesure
	start = clock();

	Parametres * parametres;
	parametres = Parametres::getInstance();
	parametres->parserFichierConfiguration();
	parametres->validationDataEntrees();
	parametres->afficherParametres();

	//system("COLOR F0");
	//Color(15,12);
	Color(0,12);
    printf("Test Before\n");
	//Color(15,0);
	Color(0,7);
    printf("Test After\n");

	Analyse * analyse = new Analyse();
	analyse->nb_scenario = 0;
	analyse->intervalle_de_confiance = 0;

	vector<string> listeFichiers;

	Replication maReplicationMere;

	vector<Scenario> mesScenarios;

	cerr << endl;
	cerr << "\t////////////////////////////////////////////////////////////////" << endl;
	cerr << "\t///////////////////////// SOURCE ///////////////////////////////" << endl;
	cerr << "\t////////////////////////////////////////////////////////////////" << endl;
	cerr << endl << endl;

	// Récupération des data d'entrées et construction de la simulation
	listeFichiers = liste_fichiers_du_dossier("./DATA_SOURCE/*");
	maReplicationMere = construction_replication(listeFichiers);

	// Affichage de la liste des fichiers d'entrée
	cerr << "Fichiers d'entree de la simulation mere :" << endl;
	for (int i = 0; i < (signed)listeFichiers.size(); i++)
		cerr << "\t" << listeFichiers.at(i) << endl;
	cerr << endl;

	// Affichage du résultat de la simulation initiale
	afficher_replication(maReplicationMere);

	listeFichiers.clear();




	cerr << endl << endl;
	cerr << "\t////////////////////////////////////////////////////////////////" << endl;
	cerr << "\t///////////////////////// GENERATED ////////////////////////////" << endl;
	cerr << "\t////////////////////////////////////////////////////////////////" << endl;
	cerr << endl << endl;

	char nom_dossier[50];

	if(parametres->getModeDebug())
	{
		cout << "\a" << endl;
		sprintf(nom_dossier,"./DATA_DEBUG/");
		CreateDirectory(MultiCharToUniChar(nom_dossier), NULL);
	}

	cerr << "\tGeneration en cours .";

	while(parametres->getIntervalleConfiance() > analyse->intervalle_de_confiance)
	{
		for(int i = 0; i < 5; ++i)
		{
			cerr << ".";

			Scenario tempo;
			
			float somme = 0;
			tempo.getReplications().clear();

			analyse->nb_scenario++;

			if(parametres->getModeDebug())
			{
				sprintf(nom_dossier,"./DATA_DEBUG/Scenario_%i", analyse->nb_scenario);
				CreateDirectory(MultiCharToUniChar(nom_dossier), NULL);
			}

			sprintf(nom_dossier,"./DATA_GENERATED/Scenario_%i", analyse->nb_scenario);
			CreateDirectory(MultiCharToUniChar(nom_dossier), NULL);


			// On créé les réplications
			repliquer(analyse->nb_scenario, parametres->getNbReplication(), maReplicationMere);

			
			// Récupération des data d'entrées et construction de la simulation
			for(int j = 0; j < parametres->getNbReplication(); ++j)
			{
				sprintf(nom_dossier,"./DATA_GENERATED/Scenario_%i/Replication_%i/*", analyse->nb_scenario, j + 1);
				listeFichiers = liste_fichiers_du_dossier(nom_dossier);
		
				// Affichage de la liste des fichiers d'entrée
				if(parametres->getModeDebug())
				{
					char nom_fichier[50];

					sprintf(nom_fichier,"./DATA_DEBUG/Scenario_%i/Réplication_%i.txt", analyse->nb_scenario, j + 1);
	
					ofstream fichier(nom_fichier, ios::out | ios::app);
 
					if(fichier)
					{
						fichier << "\nFichiers d'entree de la replication " << j + 1 << " :\n";

						if(listeFichiers.empty())
						{
							cerr << "\tDossier EMPTY\n";
						}
						else
						{
							for(int k = 0; k < (signed)listeFichiers.size(); ++k)
							{
								fichier << "\t" << listeFichiers.at(k) << endl;
							}
							fichier << "\n\n";
						}

						fichier.close();
					}
					else
						cerr << "Impossible d'ouvrir le fichier !" << endl;
				}

				tempo.setReplications(construction_replication(listeFichiers));
			}

			for(int cpt = 0; cpt < parametres->getNbReplication(); ++cpt)
			{
				if(tempo.getReplications().at(cpt).getSimulationValide())
					somme++;
			}
			tempo.setMoyenne(somme/parametres->getNbReplication());
			mesScenarios.push_back(tempo);
			
		}
		/*
		float moyenne=0;
		for(int cpt = analyse->nb_scenario; cpt > analyse->nb_scenario - 5; --cpt)
		{
			moyenne += mesScenarios.at(cpt).getMoyenne();
		}
		moyenne /= 5;

		analyse->moyenne.push_back(moyenne);
		*/
		analyse->intervalle_de_confiance++;
		//Calcul des nouveaux résultats

	}
	

	// Affichage du résultat de la simulation
	for(int i = 0; i < (signed)mesScenarios.size(); ++i)
		for(int j = 0; j < (signed)mesScenarios.at(i).getReplications().size(); ++j)
			enregistrer_replication(i, j, mesScenarios.at(i).getReplications().at(j));



	cerr << endl << endl;
	cerr << "\t////////////////////////////////////////////////////////////////" << endl;
	cerr << "\t///////////////////////// FIN //////////////////////////////////" << endl;
	cerr << "\t////////////////////////////////////////////////////////////////" << endl;
	cerr << endl << endl;

	cerr << endl << "how are you?" << endl;

	// Arret de la mesure
	end = clock();
	elapsed = ((double)end - start) / CLOCKS_PER_SEC; // Conversion en seconde 
    
    cout << endl << "Ce programme s'est execute en " << elapsed << " secondes." << endl;

	system("pause");
	
	return 0;
}