package dao;

import java.util.ArrayList;
import java.util.List;
import java.io.ByteArrayInputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import controleur.Journal;
import modele.StatistiquesJour;

public class JourDAO extends Telechargeur {
	
	private static final String URL_LISTE_STATISTIQUES = "https://sd.s0und.space/service-lumiere/";
	
	public List<StatistiquesJour> lireStatistiquesJour(int annee, int mois, int jour)
	{
		Journal.ecrire(Journal.NIVEAU.ROULEMENT, "JourDAO.lireStatistiquesJour("+annee+", "+mois+", "+jour+")");
	    List<StatistiquesJour> listeStatistiquesJour = new ArrayList<StatistiquesJour>();

	    // Parsing du XML
	    String xml = getXml(URL_LISTE_STATISTIQUES + annee + "/" + mois + "/" + jour);
	    try {
	        DocumentBuilder parseur = DocumentBuilderFactory.newInstance().newDocumentBuilder();
	        Document document = parseur.parse(new ByteArrayInputStream(xml.getBytes()));

	        Element elementResume = (Element) document.getElementsByTagName("resume").item(0);

//        	int jour = Integer.parseInt(noeudElement.getElementsByTagName("jour").item(0).getTextContent()); // Déjà dans la requete
        	double jourMesureMinimum = Double.parseDouble(elementResume.getElementsByTagName("min").item(0).getTextContent());
        	double jourMesureMoyenne = Double.parseDouble(elementResume.getElementsByTagName("moyenne").item(0).getTextContent());
        	double jourMesureMaximum = Double.parseDouble(elementResume.getElementsByTagName("max").item(0).getTextContent());
	        
	        NodeList noeuds = document.getElementsByTagName("captureLumiere");
	        for(int i=0;i<noeuds.getLength();i++)
	        {
	            Element element = (Element) noeuds.item(i);

	        	int heure = Integer.parseInt(element.getElementsByTagName("heure").item(0).getTextContent());;
	        	double mesureMinimum = Double.parseDouble(element.getElementsByTagName("min").item(0).getTextContent());
	            double mesureMoyenne = Double.parseDouble(element.getElementsByTagName("moyenne").item(0).getTextContent());
	        	double mesureMaximum = Double.parseDouble(element.getElementsByTagName("max").item(0).getTextContent());
	        	
	            StatistiquesJour statistiquesJour = new StatistiquesJour();
	            statistiquesJour.setJour(jour);
	            statistiquesJour.setJourMesureMinimum(jourMesureMinimum);
	            statistiquesJour.setJourMesureMoyenne(jourMesureMoyenne);
	            statistiquesJour.setJourMesureMaximum(jourMesureMaximum);
	            
	            statistiquesJour.setHeure(heure);
	            statistiquesJour.setMesureMinimum(mesureMinimum);
	            statistiquesJour.setMesureMoyenne(mesureMoyenne);
	            statistiquesJour.setMesureMaximum(mesureMaximum);
	            
	            listeStatistiquesJour.add(statistiquesJour);
	        }

	    } catch(Exception e){
	        e.printStackTrace();
	    }

	    return listeStatistiquesJour;
	}
}