package com.mx.dla.dda.contrato.titulo.actions;


import java.io.File;
import java.io.FileInputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.struts2.ServletActionContext;
import org.springframework.beans.factory.annotation.Autowired;

import com.mx.dla.admin.dtos.UsuarioDTO;
import com.mx.dla.dda.contrato.common.actions.BaseContratoAction;
import com.mx.dla.dda.contrato.listado.dtos.ContentType;
import com.mx.dla.dda.reporte.amortizacion.baseActivos.bos.BaseActivosBO;
import com.mx.dla.dda.reporte.ws.dtos.ResponseGeneraReporteDTO;

public class DescargaMasivaTitulosAction extends BaseContratoAction  {
	private static final long serialVersionUID = 1L;
	
	
	
	private ResponseGeneraReporteDTO respuesta;
	
	private String mensajeExcepcion;
	private String fecha;
	private String fechaFin;
	private String rutaArchivo;
	private String contentType;
	private boolean vigente = Boolean.FALSE;
	
	@Autowired
	private BaseActivosBO baseActivosBO;
	
	public String execute() throws Exception {
		return SUCCESS;
	}
		
	
	public String generarReporte()
	{		
		try
		{
			DateFormat formatoEntrada = new SimpleDateFormat("dd/MM/yyyy");
			Date date = formatoEntrada.parse(fecha);
			Date dateFin = formatoEntrada.parse(fechaFin);

			SimpleDateFormat formatoAnio = new SimpleDateFormat("dd/MM/yyyy");
			String anio = formatoAnio.format(date);
			String anioFin = formatoAnio.format(dateFin);
			
			UsuarioDTO usuario = (UsuarioDTO) getSession().get("usuario");
			String fileFileName = "dmt_" + usuario.getExpediente() + "" + anio.replace('/', '_');
			
			respuesta = baseActivosBO.generaReporteBaseActivos( fileFileName, anio, anioFin,vigente);
			
		} catch (Exception e) {
			logger.debug("Exception : [{}]", e);
			setMensajeExcepcion("Fallo al generar el reporte.");
		}

		return SUCCESS;
		
	}//Termina public String generarReporte() 
	
	
	public String descargarArchivo(){
		
		byte[] result = null;
		
		logger.info("ruta archivo: " + rutaArchivo );
		
		try
		{
			String [] layRuta = rutaArchivo.split("\\/");
			Long lnuTotalRuta = (long) layRuta.length;
			
			//String r = "C:\\Software\\apache-tomcat-7.0.67\\";
			String nombre  =  layRuta[ (int) ( lnuTotalRuta - 1 ) ]; 
			//File file = new File(r + nombre);
			File file = new File(rutaArchivo);
			
			logger.info("nombre archivo: " + nombre );
			logger.info("descar: " + rutaArchivo);
			
			result = IOUtils.toByteArray(new FileInputStream(file));
			contentType = ContentType.getType(FilenameUtils.getExtension(rutaArchivo));
			
			HttpServletResponse response = ServletActionContext.getResponse();
			response.setContentLength(result.length);
			response.setContentType(this.contentType);
			response.setHeader("Content-Disposition", "attachment; filename="+ nombre);
		
			logger.info("response [{}] :" + response );
			
			ServletOutputStream out = response.getOutputStream();
			out.write(result);
			out.flush();
		
		}catch (Exception ex){
			logger.error("Error en [" + this.getClass() +"]", ex);		       
		}
		
		return null;
	}
	
	public ResponseGeneraReporteDTO getRespuesta() {
		return respuesta;
	}

	public void setRespuesta(ResponseGeneraReporteDTO respuesta) {
		this.respuesta = respuesta;
	}

	public String getMensajeExcepcion() {
		return mensajeExcepcion;
	}

	public void setMensajeExcepcion(String mensajeExcepcion) {
		this.mensajeExcepcion = mensajeExcepcion;
	}
	
	public String getRutaArchivo() {
		return rutaArchivo;
	}

	public void setRutaArchivo(String rutaArchivo) {
		this.rutaArchivo = rutaArchivo;
	}

	public String getFecha() {
		return fecha;
	}

	public void setFecha(String fecha) {
		this.fecha = fecha;
	}

	public String getFechaFin() {
		return fechaFin;
	}

	public void setFechaFin(String fechaFin) {
		this.fechaFin = fechaFin;
	}



	public boolean getVigente() {
		return vigente;
	}



	public void setVigente(boolean checkMe) {
		this.vigente = checkMe;
	}
	
	
}
