package pikelake.environment;

import java.io.File;
import java.util.Scanner;
import java.io.FileNotFoundException;

import pikelake.pikes.Pike;
import pikelake.pikes.PikesGroup;

import fr.cemagref.simaqualife.kernel.processes.AquaNismsGroupProcess;

/**
 *		Classe qui lit le fichier contenant les horaires de lever et de coucher du soleil
 *		Ces horaires sont rang�s a l'initialisation dans un tableau pour un acces plus rapide
 *		@author Guillaume GARBAY
 *		@version 1.0
 */
public class HoraireLeverCoucher extends AquaNismsGroupProcess<Pike,PikesGroup> {

	// Tableaux contenant les horaires de lever et coucher du soleil ainsi que les phases du jour en fonction de la date
	public static int heureLeverCoucher[][][] = new int[2][32][13] ;	//	[0=lever, 1=coucher]	[jour]	[mois]	
	public static String phaseJournee[][][] = new String[32][13][25];	//	[jour]	[mois]	[heure]

	/**
	 *		Lis le fichier contenant les horaires de lever et de coucher du soleil
	 *		Remplis les tableaux heureLeverCoucher et phaseJournee
	 *		@param object L'ensemble des individus
	 *		@return /
	 */
	@Override
	public void doProcess (PikesGroup object) {
		
		// Variables qui recuperent les valeurs lues dans le fichier
		String temp[] = null, dateCompleteLever[] = null, dateCompleteCoucher[] = null;
		String jour = null, mois = null, heureLever = null, heureCoucher = null;
	
		// Fichier contenant les horaires de lever et de coucher du soleil
		String filePath = "data/input/leshorairesdusoleil.csv";    	
		Scanner scanner;
		try {
			scanner = new Scanner(new File(filePath));
			String line = scanner.nextLine();
			
			// On boucle sur chaque ligne detect�e
			while (scanner.hasNextLine()) {
				
				line = scanner.nextLine();	// Lecture de la ligne
				temp = line.split(";");		// Decoupage de la ligne

				// D�termination heure de lever du soleil
				dateCompleteLever = temp[0].split("[/: ]+");
				dateCompleteCoucher = temp[1].split("[/: ]+");
					// Calcul date
				jour = dateCompleteLever[0];
				mois = dateCompleteLever[1];
					// Lever du soleil
				heureLever = dateCompleteLever[3];
					// Coucher du soleil
				heureCoucher = dateCompleteCoucher[3];
				
				
				heureLeverCoucher[0][Integer.parseInt(jour)][Integer.parseInt(mois)] = Integer.parseInt(heureLever);
				heureLeverCoucher[1][Integer.parseInt(jour)][Integer.parseInt(mois)] = Integer.parseInt(heureCoucher);				
			}
			scanner.close(); // Fermeture du fichier
		} catch (FileNotFoundException e) {
			// Auto-generated catch block, erreur de lecture du fichier
			e.printStackTrace();
		}
		
		// Remplissage du tableau qui determine la phase du jour avec les horaires lus dans le fichier
		for (int m=1; m<13 ;m++)
			for (int j=1; j<32; j++) 
				for (int h=0; h<25; h++) {
					if		(h > heureLeverCoucher[0][j][m] -2 & h < heureLeverCoucher[0][j][m] +2)	phaseJournee[j][m][h] = "AUBE";
					else if (h > heureLeverCoucher[0][j][m] +1 & h < heureLeverCoucher[1][j][m] -1)	phaseJournee[j][m][h] = "JOUR";
					else if (h > heureLeverCoucher[1][j][m] -2 & h < heureLeverCoucher[1][j][m] +2)	phaseJournee[j][m][h] = "CREP";
					else																			phaseJournee[j][m][h] = "NUIT";
				}			
	}	
	
	/**
	 *		Retourne la phase du jour en fonction d'une date (jour+mois+heure)
	 *		@param jour Entier contenant le jour
	 *		@param mois Entier contenant le mois
	 *		@param heure Entier contenant l'heure
	 *		@return phaseJournee[jour][mois][heure] Chaine de caract�re contenant la phase du jour
	 */
	public static String getPhase (int jour, int mois, int heure) {
		return phaseJournee[jour][mois][heure];
	}
	
	/**
	 *		Retourne l'horaire de lever ou de coucher en fonction d'une date (jour+mois)
	 *		@param levercoucher Entier ou booleen 0=lever, 1=coucher		 
	 *		@param jour Entier contenant le jour
	 *		@param mois Entier contenant le mois
	 *		@return heureLeverCoucher[0=lever, 1=coucher][jour][mois] Entier representant l'heure du lever ou du coucher
	 */
	public int getHoraire (int levercoucher, int jour, int mois) {
		return heureLeverCoucher[levercoucher][jour][mois] ;
	}
	
}