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.StatistiquesMois;

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

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

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

//	    	int mois = Integer.parseInt(noeudElement.getElementsByTagName("mois").item(0).getTextContent()); // Déjà dans la requete
	    	double moisMesureMinimum = Double.parseDouble(elementResume.getElementsByTagName("min").item(0).getTextContent());
	    	double moisMesureMoyenne = Double.parseDouble(elementResume.getElementsByTagName("moyenne").item(0).getTextContent());
	    	double moisMesureMaximum = 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 jour = Integer.parseInt(element.getElementsByTagName("jour").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());
	        	
	            StatistiquesMois statistiquesMois = new StatistiquesMois();
	            statistiquesMois.setMois(mois);
	            statistiquesMois.setMoisMesureMinimum(moisMesureMinimum);
	            statistiquesMois.setMoisMesureMoyenne(moisMesureMoyenne);
	            statistiquesMois.setMoisMesureMaximum(moisMesureMaximum);
	            
	            statistiquesMois.setJour(jour);
	            statistiquesMois.setMesureMinimum(mesureMinimum);
	            statistiquesMois.setMesureMoyenne(mesureMoyenne);
	            statistiquesMois.setMesureMaximum(mesureMaximum);
	            
	            listeStatistiquesMois.add(statistiquesMois);
	        }

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

	    return listeStatistiquesMois;
	}
}