
package presentacion;

import datos.FormatosNumericos;
import encapsuladores.CabeceraFactura;
import encapsuladores.LineaFactura;
import encapsuladores.Mensaje;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.List;
import negocio.GestionMail;
import negocio.GestionRepositorio;

public class Menu {
           
         Object[] repositorio;
         GestionRepositorio gestionRepositorio = new GestionRepositorio();
         DecimalFormat[] decimalFormat = new FormatosNumericos().getFormatosNumericos();          
         
    public void ejecutarMenu()
    {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        try {           
           repositorio = gestionRepositorio.cargar();
            
           byte opcion;
           
           do {
                System.out.println("--------------------------------------------------------------------------------");                
                System.out.println("1.- Enviar mail");
                System.out.println("2.- Leer mail");
                System.out.println("3.- Finalizar");
                System.out.println("--------------------------------------------------------------------------------");  
                System.out.print("Seleccione opción : ");
                opcion = (byte)Integer.parseInt(bufferedReader.readLine());    
                
                switch(opcion){
                    case 1: enviarMail();
                            break;
                    case 2: leerMail();
                            break;                                                       
                }
                 
           } while (opcion != 3);
           
        }
          catch (Exception exception){
              System.out.println(exception.getMessage());       
        }
    }
     
    private void enviarMail() throws Exception {
        new GestionMail().enviar(repositorio);      
    }
    
    private void leerMail() throws Exception {
        List<Object[]> facturasRecibidas = new GestionMail().leer(repositorio);   
               
        for (int i=0; i<facturasRecibidas.size(); i++) {
            
            Object[] datosFactura = facturasRecibidas.get(i);
            Mensaje mensaje =                        (Mensaje)            datosFactura[0];
            CabeceraFactura cabeceraFactura =        (CabeceraFactura)    datosFactura[1]; 
            List<LineaFactura> listaLineasFactura =  (List<LineaFactura>) datosFactura[2];  
            
            System.out.println("----------------------------------------");
            System.out.println("MAIL");
            System.out.println("----------------------------------------");
            System.out.println("Remitente :  "+mensaje.getRemitente());
            System.out.println("Fecha envío :  "+new SimpleDateFormat("dd 'de' MMMMM 'de' yyyy 'a las' HH:mm:ss").format( mensaje.getFechaEnvio() ));
            System.out.println("Asunto :  "+mensaje.getAsunto());
            System.out.println("Texto :  "+mensaje.getTexto());
            System.out.println("Fichero adjunto:  "+mensaje.getNombreFicheroAdjunto());       
             if (mensaje.getNombreFicheroAdjunto() != null) {
                 System.out.println("----------------------------------------");
                 System.out.println("CABECERA FACTURA");
                 System.out.println("----------------------------------------");
                 System.out.println("Número factura : "+cabeceraFactura.getNumeroFactura());  
                 System.out.println("Fecha factura : "+new SimpleDateFormat("dd-MM-yyyy").format( cabeceraFactura.getFechaFactura() ));
                 System.out.println("DATOS CLIENTE");
                 System.out.println("---------------");
                 System.out.println("NIF : "+cabeceraFactura.getNIFCliente());          
                 System.out.println("Nombre : "+cabeceraFactura.getNombreCliente());
                 System.out.println("Dirección : "+cabeceraFactura.getDireccionCliente());
                 System.out.println("Población : "+cabeceraFactura.getPoblacionCliente());
                 System.out.println("PIE FACTURA");
                 System.out.println("---------------");     
                 System.out.println("Bruto :       "+String.format("%15s",decimalFormat[3].format( cabeceraFactura.getBrutoFactura(listaLineasFactura) )));  
                 System.out.println("IVA :                "+String.format("%5s",decimalFormat[1].format(cabeceraFactura.getIVA()))+"%");
                 System.out.println("Importe IVA : "+String.format("%15s",decimalFormat[3].format(cabeceraFactura.getImporteIVA(listaLineasFactura))));
                 System.out.println("Líquido :     "+String.format("%15s",decimalFormat[3].format(cabeceraFactura.getLiquidoFactura(listaLineasFactura))));
                 System.out.println("----------------------------------------");
                 System.out.println("LINEAS FACTURA");
                 System.out.println("----------------------------------------"); 
                 for (int k=0; k<listaLineasFactura.size(); k++) {
                     LineaFactura lineaFactura = listaLineasFactura.get(k);
                     System.out.println("Referencia : "+lineaFactura.getReferenciaArticulo());
                     System.out.println("Descripción : "+lineaFactura.getDescripcion());
                     System.out.println("Precio unitario :      "+String.format("%11s",decimalFormat[2].format(lineaFactura.getPrecioUnitario())));
                     System.out.println("Unidades :         "+String.format("%12s",decimalFormat[0].format(lineaFactura.getUnidades())));
                     System.out.println("Importe linea :    "+String.format("%15s",decimalFormat[3].format(lineaFactura.getImporteLinea())));
                     System.out.println("----------------------------------------");
                 }
            }
        }
    }
}
