package com.rjconsultores.ventaboletos.service.impl;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.rjconsultores.ventaboletos.constantes.Constantes;
import com.rjconsultores.ventaboletos.dao.IntegracaoDerPrDAO;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.Ruta;
import com.rjconsultores.ventaboletos.service.IntegracaoService;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import com.rjconsultores.ventaboletos.vo.exportacao.QdmpDerLinhaVo;

@Service("integracaoService")
public class IntegracaoServiceImpl implements IntegracaoService {
	private static final Logger log = LogManager.getLogger(IntegracaoServiceImpl.class);

	public static final String DATE_FORMAT_FISCAL = "yyyyMMdd";
	public static final String QUEBRA_LINHA = "\r\n";

	@Autowired
	private IntegracaoDerPrDAO integracaoDerPrDAO;

	@Override
	public File importacaoQdmpDer(Date inicio, Date fim, Empresa empresa, List<Ruta> lslinhas) {
		try {
			String nomeArquivo = "QDMP_DER" + DateUtil.getStringDate(Calendar.getInstance().getTime(), "yyyyMMddhhmmss");
	
			File arquivoQdmp = File.createTempFile(nomeArquivo + "-", ".txt");
	
			PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(arquivoQdmp), Constantes.UTF_8));
			
			for (Ruta ruta : lslinhas) {
				String cabeca = integracaoDerPrDAO.buscarDadosImportacaoCabeca(inicio, fim, empresa, ruta.getRutaId());
				List<QdmpDerLinhaVo> listaQdmpLinha = integracaoDerPrDAO.buscarDadosImportacaoLinha(inicio, fim, empresa, ruta.getRutaId());
				String rodape = integracaoDerPrDAO.buscarDadosImportacaoRodape(inicio, fim, empresa, ruta.getRutaId());
				
				writer.print(cabeca);
				writer.print(QUEBRA_LINHA);
				
				for (QdmpDerLinhaVo qdmpDerLinhaVo : listaQdmpLinha) {
					writer.print(qdmpDerLinhaVo.toString());
					writer.print(QUEBRA_LINHA);
				}
				
				writer.print(rodape);
				writer.print(QUEBRA_LINHA);
			}
			
			writer.close();
			return arquivoQdmp;
			
		} catch (IOException e) {
			log.error( e.getMessage(), e);
		}

		return null;
	}

}
