#include "main.h"

void lecture_equi(FILE *file1)
{
	int i;
	double x, y, z;
	
	printf("Maillage equiangulaire\n");
	fscanf(file1, "%d\n", &nb_sommets);
	nb_sommets = CARRE(nb_sommets);
	printf("%d sommets sont utilises\n", nb_sommets);
	liste_sommets = (point4d_t *)malloc(nb_sommets*sizeof(point4d_t));
	for (i=0; i<nb_sommets; i++)
	{
		fscanf(file1, "%lf %lf %lf\n", &x, &y, &z);
		liste_sommets[i].x = x*Ray;
		liste_sommets[i].y = y*Ray;
		liste_sommets[i].z = z*Ray;
		liste_sommets[i].t = 1.0;
	}
	liste_triee_y = (double *)malloc(nb_sommets*sizeof(double));
	for (i=0; i<nb_sommets; i++)
		fscanf(file1, "%lf\n", &liste_triee_y[i]);
}


void ecriture_equi(FILE *file2)
{
	int i;

	fprintf(file2, "%d\n", (int)sqrt(nb_sommets));
	//Coordonnees des points de chaque anneau
	for (i=0; i<nb_sommets; i++)
	{
		fprintf(file2, "%f %f %f %f\n", liste_sommets[i].x/Ray, liste_sommets[i].y/Ray, liste_sommets[i].z/Ray, liste_sommets[i].t);
	}

}


/**********************************************************************************/
/*	Programme principal															  */
/**********************************************************************************/

int main (int argc, char **argv)
{
	/* Donnees d'entree */
	char fentree[100], fsortie[100];
	FILE *file1, *file2;

	/* Donnees du fichier d'entree */
	int indic=0, maillage, order, level;
	int i = 0;
		
	double max, min;
	
	char * date;
	time_t intps;

	Ray = 1.0;
	order = 0;
	
		// Lecture des entrees
	while ( ++i < argc )
	{
		if ( strcmp( argv[i], "-f" ) == 0 )
		{
			strcpy( fentree, argv[++i] );
			indic += 1;
		}
		
		if (strcmp(argv[i], "-l") == 0)
		{
			level = atof(argv[++i]);
			indic += 1;
		}
		if (strcmp(argv[i], "-m") == 0)
			order = atof(argv[++i]);
	}
	
	if (indic!=2)
	{
		fprintf(stderr, "Utilisation : -f fichier_entree -l niveau_harmonique\n");
		exit(1);
	}

	
	/**		Lecture du fichier d'entree		**/
	printf("Lecture du fichier d'entree\n");
		// Ouverture du fichier
	file1 = fopen(fentree,"r");
	if (!file1)
	{
		fprintf(stderr, "Erreur d'ouverture du fichier %s\n", fentree);
		exit(1);
	}
		// Lecture des coordonnees des sommets
	
	fscanf(file1, "%d\n", &maillage);
	lecture_equi(file1);
	fclose(file1);

	/**		Generation de la texture		**/
	
	Ylm(order, level);
	
	/**		Ecriture du fichier pour la visualisation		**/
	printf("Ecriture du fichier pour la visualisation\n");
	
	max = 0;
	min = 500;
	for(i=0; i<nb_sommets; i++)
	{
		if (liste_sommets[i].t >= max)
			max = liste_sommets[i].t;
		if (liste_sommets[i].t <= min)
			min = liste_sommets[i].t;
	}
	for(i=0; i<nb_sommets-1; i++)
		liste_sommets[i].t = liste_sommets[i].t/max;
	
	date = (char *)calloc(30, sizeof(char));
	intps = time(NULL);
	strftime(date, 25, "Ylm_%d_%Hh%M", localtime(&intps));
	file2 = fopen(date,"w");
	if (!file2)
	{
		fprintf(stderr, "Erreur d'ouverture du fichier %s\n", fsortie);
		exit(1);
	}
	fprintf(file2, "%d\n", 4);
	fprintf(file2, "%d\n", maillage);
	
	ecriture_equi(file2);
	
	fclose(file2);

	free(date);

	free(liste_sommets);
	free(liste_triee_y);


	return 0;
}


