
package negocio;

import datos.FacturaDATOS;
import datos.FacturaMail;
import datos.FacturaXML;
import encapsuladores.CabeceraFactura;
import encapsuladores.Correo;
import encapsuladores.LineaFactura;
import encapsuladores.Mensaje;
import encapsuladores.SistemaArchivos;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

public class GestionMail {
 
    public void enviar(Object[] repositorio) throws Exception { 
       //      Lectura datos factura
       FacturaDATOS facturaDATOS = new FacturaDATOS();
       List<LineaFactura> listaLineasFactura = facturaDATOS.leerLineas();
       CabeceraFactura cabeceraFactura = facturaDATOS.leerCabecera();
       // El nombreArchivoXML no es susceptible de aplicarlo al Respositorio dado que se forma en tiempo de ejecución con las cadenas detalladas a continuación
       // Al nombre del archivo Factura se le concatena el número de factura y el tiempo en que ha sido generado con precisión de hasta el segundo                              
       String nombreArchivoXML = ((SistemaArchivos)repositorio[1]).getRutaCreacion() + "Factura" + "_" + Integer.toString(cabeceraFactura.getNumeroFactura()) + "_" + new SimpleDateFormat("yyyyMMddHHmmss").format(new java.util.Date()) + ".xml";
       //      Generar XML
       new FacturaXML().generarXML(new Object[]{nombreArchivoXML, cabeceraFactura, listaLineasFactura});        
       //      Enviar mail con fichero XML adjunto
       new FacturaMail().enviar(nombreArchivoXML, (Correo)repositorio[0]);
       
    }
    
    public List<Object[]> leer(Object[] repositorio) throws Exception {
             
        List<Mensaje> listaMensajes = new FacturaMail().leer(repositorio); 
        
        List<Object[]> facturasRecibidas = new ArrayList();
        for (int i=0; i<listaMensajes.size(); i++) {
            Mensaje mensaje = listaMensajes.get(i);
            Object[] datosFactura = new Object[3];  
            datosFactura[0] = mensaje;
            datosFactura[1] = null;
            datosFactura[2] = null;
            if (mensaje.getNombreFicheroAdjunto() != null) {
                new FacturaXML().leerXML(datosFactura, (SistemaArchivos)repositorio[1]);
            }
                 // datosFactura[0] -->> mensaje
                 // datosFactura[1] -->> cabeceraFactura          instanciado en   FacturaXML().leerXML()
                 // datosFactura[2] -->> listaLineasFactura       instanciado en   FacturaXML().leerXML()            
            facturasRecibidas.add(datosFactura);
        }
                 
        return facturasRecibidas;
    }
}
