
package datos;

import encapsuladores.MeteorologiaDiaria;
import encapsuladores.MeteorologiaMunicipio;
import java.util.List;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;

public class PrediccionMeteorologicaDATOS {
    
    public MeteorologiaMunicipio obtenerPrediccionMeteorologica(String idMunicipio) throws Exception{ 
              
        MeteorologiaMunicipio meteorologiaMunicipio = new MeteorologiaMunicipio();
        String[] periodo = {"00-24","00-12","12-24","00-06","06-12","12-18","18-24"};
        meteorologiaMunicipio.setPeriodo(periodo);
                        
        Document document = new SAXBuilder().build("http://www.aemet.es/xml/municipios/localidad_"+idMunicipio+".xml");
        
        Element raiz = document.getRootElement(); 
        
        Element origen = raiz.getChild("origen");
        Element productor = origen.getChild("productor");
        String nombreProductor = productor.getText();
        meteorologiaMunicipio.setProductor(nombreProductor);

        Element nombre = raiz.getChild("nombre");
        String nombreMunicipio = nombre.getText();
        meteorologiaMunicipio.setNombreMunicipio(nombreMunicipio);
       
        Element prediccion = raiz.getChild("prediccion");
        List<Element> listaDias = prediccion.getChildren("dia");      

        for (int i=0; i<listaDias.size(); i++)        
        {      
            Element elementDia = listaDias.get(i);
            meteorologiaMunicipio.setMeteorologiaDiaria(i, new MeteorologiaDiaria());
            
            meteorologiaMunicipio.getMeteorologiaDiaria(i).setFecha(elementDia.getAttributeValue("fecha"));
            
            List<Element> listaProbabilidadPrecipitacion = elementDia.getChildren("prob_precipitacion");            
            for (int j=0; j<listaProbabilidadPrecipitacion.size(); j++)        
            {
                Element probabilidadPrecipitacion = listaProbabilidadPrecipitacion.get(j);
                if (probabilidadPrecipitacion.getAttribute("periodo") == null) 
                    {    
                        meteorologiaMunicipio.getMeteorologiaDiaria(i).setProbabilidadPrecipitacion(j, probabilidadPrecipitacion.getText());                   
                    }
                  else
                    {
                        if (meteorologiaMunicipio.getPeriodo(j).compareTo(probabilidadPrecipitacion.getAttributeValue("periodo")) == 0) 
                        {         
                             meteorologiaMunicipio.getMeteorologiaDiaria(i).setProbabilidadPrecipitacion(j, probabilidadPrecipitacion.getText());                           
                        } 
                    }
            }
                
            List<Element> listaEstadoCielo = elementDia.getChildren("estado_cielo");            
            for (int k=0; k<listaEstadoCielo.size(); k++)        
            {
                Element estadoCielo = listaEstadoCielo.get(k);
                if (estadoCielo.getAttribute("periodo") == null) 
                    {    
                        meteorologiaMunicipio.getMeteorologiaDiaria(i).setEstadoCielo(k, estadoCielo.getAttributeValue("descripcion"));                   
                    }
                  else
                    {
                        if (meteorologiaMunicipio.getPeriodo(k).compareTo(estadoCielo.getAttributeValue("periodo")) == 0) 
                        {         
                             meteorologiaMunicipio.getMeteorologiaDiaria(i).setEstadoCielo(k, estadoCielo.getAttributeValue("descripcion"));                           
                        } 
                    }                
            }
            
            Element temperatura = elementDia.getChild("temperatura");
            Element temperaturaMaxima = temperatura.getChild("maxima");
            meteorologiaMunicipio.getMeteorologiaDiaria(i).setTemperaturaMaxima(temperaturaMaxima.getText());               
            Element temperaturaMinima = temperatura.getChild("minima");
            meteorologiaMunicipio.getMeteorologiaDiaria(i).setTemperaturaMinima(temperaturaMinima.getText());    
            
            Element humedadRelativa = elementDia.getChild("humedad_relativa");
            Element humedadRelativaMaxima = humedadRelativa.getChild("maxima");
            meteorologiaMunicipio.getMeteorologiaDiaria(i).setHumedadRelativaMaxima(humedadRelativaMaxima.getText());               
            Element humedadRelativaMinima = humedadRelativa.getChild("minima");
            meteorologiaMunicipio.getMeteorologiaDiaria(i).setHumedadRelativaMinima(humedadRelativaMinima.getText());              
        }
        
        return meteorologiaMunicipio;
    }        
}
