
package datos;

import encapsuladores.MeteorologiaMunicipio;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Iterator;
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, int diasPosteriores) throws Exception{ 
        
        
        GregorianCalendar gregorianCalendar = new GregorianCalendar();
        gregorianCalendar.add(Calendar.DATE, diasPosteriores);
        String fecha = String.format("%04d", gregorianCalendar.get(Calendar.YEAR)) + "-" + String.format("%02d", gregorianCalendar.get(Calendar.MONTH)+1) + "-" + String.format("%02d", gregorianCalendar.get(Calendar.DATE));
       
        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");
       
        boolean encontradoDia = false;
        List listaDias = prediccion.getChildren("dia");
        Iterator iteratorDias = listaDias.iterator(); 
        while (iteratorDias.hasNext() && !encontradoDia)
          {                         
            Element dia = (Element)iteratorDias.next(); 
            String fechaXML = dia.getAttributeValue("fecha");
            
            if (fechaXML.compareTo(fecha) == 0){
                encontradoDia = true;
                meteorologiaMunicipio.setFecha(fechaXML);
                
                List listaProbabilidadPrecipitacion = dia.getChildren("prob_precipitacion");
                Iterator iteratorProbabilidadPrecipitacion = listaProbabilidadPrecipitacion.iterator(); 
                int i = 0;
                while (iteratorProbabilidadPrecipitacion.hasNext()){                         
                    Element probPrecipitacion = (Element)iteratorProbabilidadPrecipitacion.next();     
                    if (probPrecipitacion.getAttribute("periodo") == null) { 
                        meteorologiaMunicipio.setProbabilidadPrecipitacion(i, probPrecipitacion.getText());
                    }
                    else
                    {
                        if (probPrecipitacion.getAttributeValue("periodo").compareTo(probPrecipitacion.getAttributeValue("periodo")) == 0) {                       
                             meteorologiaMunicipio.setProbabilidadPrecipitacion(i, probPrecipitacion.getText());   
                        }
                    }
                    i++;
                }
                
                List listaEstadoCielo = dia.getChildren("estado_cielo");
                Iterator iteratorEstadoCielo = listaEstadoCielo.iterator(); 
                int j = 0;
                while (iteratorEstadoCielo.hasNext())
                {                         
                    Element estadoDelCielo = (Element)iteratorEstadoCielo.next();   
                    if (estadoDelCielo.getAttribute("periodo") == null) {           
                        meteorologiaMunicipio.setEstadoCielo(j, estadoDelCielo.getAttributeValue("descripcion"));
                    }
                    else
                    {                    
                        if (meteorologiaMunicipio.getPeriodo(j).compareTo(estadoDelCielo.getAttributeValue("periodo")) == 0) {                      
                             meteorologiaMunicipio.setEstadoCielo(j, estadoDelCielo.getAttributeValue("descripcion")); 
                        }
                    }
                    j++;
                }
                                     
                Element temperatura = dia.getChild("temperatura");
                
                Element maxima = temperatura.getChild("maxima");
                meteorologiaMunicipio.setTemperaturaMaxima(maxima.getText());
                
                Element minima = temperatura.getChild("minima");
                meteorologiaMunicipio.setTemperaturaMinima(minima.getText());
            }
          } 
 
        return meteorologiaMunicipio;
    }        
}
