package TP3;

import org.graphstream.algorithm.Toolkit;
import org.graphstream.graph.Graph;

public class Propagation
{

	public static void main(String[] args)
	{
		Graph g1 = GenererGraphe.genererGrapheFichier("com-dblp.ungraph.txt");
		Propagation.Simulation(g1,5,90,"Fichier");
		Graph gAleatoire = GenererGraphe.GenererGrapheAleatoire(30000, 10);
		Propagation.Simulation(gAleatoire,5,90,"Aleatoire");

		Graph gBarabasi = GenererGraphe.genererGrapheBarabasiAlbert((int) Toolkit.averageDegree(gAleatoire),gAleatoire.getNodeCount());
		Propagation.Simulation(gBarabasi,5,90,"Barabasi");
	}

	private static void Simulation (Graph graph, int nbExec, int nbJour, String dossier)
	{
		Scenario scenario1 = new Scenario(1, graph, nbJour);
		Scenario scenario2 = new Scenario(2, graph, nbJour);
		Scenario scenario3 = new Scenario(3, graph, nbJour);

		for (int i = 0; i < nbExec; i++)
		{
			System.out.println("Exécution n° " + (i+1) );
			scenario1.run();
			scenario2.run();
			scenario3.run();
		}

		double[] nombreInfecte1 = scenario1.getNbInfectes();
		double[] nombreInfecte2 = scenario2.getNbInfectes();
		double[] nombreInfecte3 = scenario3.getNbInfectes();


		String[] nomFichiers = {"evolution1", "evolution2", "evolution3"};
		CreerFichier.creerFichierData(nomFichiers[0], Propagation.moyenneTab(nombreInfecte1, nbExec), dossier);
		CreerFichier.creerFichierData(nomFichiers[1], Propagation.moyenneTab(nombreInfecte2, nbExec), dossier);
		CreerFichier.creerFichierData(nomFichiers[2], Propagation.moyenneTab(nombreInfecte3, nbExec), dossier);

		CreerFichier.creerGraphe(nomFichiers[0],"Scenario1", dossier);
		CreerFichier.creerGraphe(nomFichiers[1],"Scenario2", dossier);
		CreerFichier.creerGraphe(nomFichiers[2],"Scenario3", dossier);
		System.out.println("Graphe " + dossier);

		System.out.println("groupe 0 = " + scenario3.getGroupe0());
		System.out.println("groupe 1 = " + scenario3.getGroupe1());

		System.out.println("seuil épidémique (aléatoire) : " + scenario2.getSeuil());
		System.out.println("seuil épidémique (sélective) : " + scenario3.getSeuil());
	}

	private static double[] moyenneTab(double[] tab, int nbExec)
	{
		double[] tabResultat = new double[tab.length];
		for (int i = 0; i < tab.length; i++)
			tabResultat[i] = tab[i]/nbExec;

		return tabResultat;
	}
}
