
package presentacion;

import encapsuladores.MeteorologiaMunicipio;
import excepciones.GenericaExcepcion;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.Map;
import negocio.InformacionGeografica;
import negocio.PrediccionMeteorologica;


public class Menu {
 
         Map<String, String> provincias;
         Map<String, String> municipios;
         private String actualProvincia = "28";    // establecemos Madrid como provincia seleccionada por defecto         
         
    public void ejecutarMenu()
    {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        try {          
 
           provincias = new InformacionGeografica().leerProvincias();
           municipios = leerMunicipios();
           
           byte opcion;
           
           do {
                System.out.println("--------------------------------------------------------------------------------");
                System.out.println("Provincia : "+actualProvincia+" - "+provincias.get(actualProvincia));
                System.out.println("--------------------------------------------------------------------------------");                
                System.out.println("1.- Cambio de provincia");
                System.out.println("2.- Obtener predicción meteorológica");
                System.out.println("3.- Finalizar");
                System.out.println("--------------------------------------------------------------------------------");  
                System.out.print("Seleccione opción : ");
                opcion = (byte)Integer.parseInt(bufferedReader.readLine());    
                
                switch(opcion){
                    case 1: cambiarProvincia();
                            break;
                    case 2: obtenerPrediccionMeteorologica();
                            break;                                                                    
                }
                 
           } while (opcion != 3);
           
        } catch (GenericaExcepcion genericaExcepcion){
              switch (genericaExcepcion.getCodigoError()){
                  case -20: System.out.println("Identificador de provincia no encontrado");        
                            break;
                  case -21: System.out.println("Identificador de municipio no encontrado");        
                            break;                     
              }           
        } 
          catch (Exception exception){
              System.out.println(exception.getMessage());       
        }
    }

    private Map<String, String> leerMunicipios() throws Exception{
        return new InformacionGeografica().leerMunicipios(actualProvincia);
    }    
    
    private void cambiarProvincia() throws Exception{   
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        
        System.out.println("número de provincias   "+provincias.size());
        Iterator iteratorProvincias = provincias.keySet().iterator();
        while (iteratorProvincias.hasNext()) {
            String idProvincia = (String) iteratorProvincias.next();
            System.out.println(idProvincia+"  -  "+provincias.get(idProvincia));
        }
 
        System.out.print("Introduzca identificador de provincia (nn) : ");
        String nuevoIdProvincia = bufferedReader.readLine(); 
        
        if (provincias.containsKey(nuevoIdProvincia)) {           
            actualProvincia = nuevoIdProvincia;    
            municipios = leerMunicipios();
        }
        else {
            throw new GenericaExcepcion(-20);
        }
    }
    
    private void obtenerPrediccionMeteorologica() throws Exception{
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        
        System.out.println("número de municipios  "+municipios.size());
        Iterator iteratorMunicipios = municipios.keySet().iterator();
        while (iteratorMunicipios.hasNext()) {
            String idMunicipio = (String) iteratorMunicipios.next();
            System.out.println(idMunicipio+"  -  "+municipios.get(idMunicipio));
        }        
       
        System.out.print("Introduzca identificador de municipio (nnnnn) : ");
        String idMunicipio = bufferedReader.readLine();    
        
        if (municipios.containsKey(idMunicipio)) {           
            System.out.println("Municipio : "+idMunicipio+" - "+municipios.get(idMunicipio));
        }
        else {
            throw new GenericaExcepcion(-21);
        }        

        int diasPosteriores;
        do {
             System.out.print("Introduzca dias posteriores respecto a hoy (0-6) : ");
             diasPosteriores = Integer.parseInt(bufferedReader.readLine()); 
        } while (diasPosteriores<0 || diasPosteriores>6);
        
        MeteorologiaMunicipio meteorologiaMunicipio = new PrediccionMeteorologica().obtenerPrediccionMeteorologica(idMunicipio, diasPosteriores);
        System.out.println("--------------------------------------------------------------------------------");
        System.out.println("Información elaborada por la Agencia Estatal de Meteorología");
        System.out.println("--------------------------------------------------------------------------------"); 
        System.out.println("Productor : "+meteorologiaMunicipio.getProductor());
        System.out.println("Municipio : "+meteorologiaMunicipio.getNombreMunicipio());
        System.out.println("Fecha : "+meteorologiaMunicipio.getFecha());
        System.out.println("Probabilidad de precipitación :");
        for (int i=0; i<meteorologiaMunicipio.getPeriodo().length; i++)
            if (meteorologiaMunicipio.getProbabilidadPrecipitacion(i) != null)
                 System.out.println(meteorologiaMunicipio.getPeriodo(i)+"   "+meteorologiaMunicipio.getProbabilidadPrecipitacion(i));
        System.out.println("Estado cielo :");
        for (int i=0; i<meteorologiaMunicipio.getPeriodo().length; i++)
            if (meteorologiaMunicipio.getEstadoCielo(i) != null)
                 System.out.println(meteorologiaMunicipio.getPeriodo(i)+"   "+meteorologiaMunicipio.getEstadoCielo(i));               
        System.out.println("Temperatura máxima : "+meteorologiaMunicipio.getTemperaturaMaxima());
        System.out.println("Temperatura mínima : "+meteorologiaMunicipio.getTemperaturaMinima());
        System.out.println("--------------------------------------------------------------------------------"); 
    }  
}

