package com.rjconsultores.ventaboletos.relatorios.impl;

import java.math.BigDecimal;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;

import com.rjconsultores.ventaboletos.relatorios.utilitarios.DataSource;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.ECFReducaoZVO;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.ItemECFVO;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import com.rjconsultores.ventaboletos.utilerias.UtiliteriasFiscal;
import com.rjconsultores.ventaboletos.vo.impressaofiscal.ImportacionFiscalReducaoZVO;
import com.rjconsultores.ventaboletos.vo.impressaofiscal.ImportacionFiscalVO;
import com.rjconsultores.ventaboletos.vo.impressaofiscal.ItemFiscalVO;

import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

public class RelatorioECFReducaoZ extends Relatorio {

	private List<ECFReducaoZVO> lsDadosRelatorio;

	public RelatorioECFReducaoZ(final Map<String, Object> parametros, Connection conexao) throws Exception {
		super(parametros, conexao);

		lsDadosRelatorio = new ArrayList<ECFReducaoZVO>();

		this.setCustomDataSource(new DataSource(this) {
			@SuppressWarnings("unchecked")
			@Override
			public void initDados() throws Exception {

				List<ImportacionFiscalVO> ecfInvalidos = (List<ImportacionFiscalVO>) parametros.get("ecfInvalidos");
				List<ImportacionFiscalReducaoZVO> redZInvalido = (List<ImportacionFiscalReducaoZVO>) parametros.get("redZInvalido");

				for (ImportacionFiscalReducaoZVO irz : redZInvalido) {
					ECFReducaoZVO zvo = new ECFReducaoZVO("REDUÇÃO Z", irz.getAliquota(), padronizaData(irz.getDatamov()),
							irz.getNumserie20(), null, padronizaValor(irz.getVendabrutadiaria()));
					lsDadosRelatorio.add(zvo);
				}

				for (ImportacionFiscalVO ecf : ecfInvalidos) {
					ECFReducaoZVO ecfvo = new ECFReducaoZVO("ECF", null, padronizaData(ecf.getDataEmissao()), ecf.getNumImpressora(),
							ecf.getCoo(), UtiliteriasFiscal.arredondar(UtiliteriasFiscal.valorTotalItensECF(ecf)));

					List<ItemECFVO> list = new ArrayList<ItemECFVO>();
					for (ItemFiscalVO ifi : ecf.getItensFiscais()) {
						list.add(new ItemECFVO(ifi.getNumItem(), ifi.getCodProduto(), padronizaValor(ifi.getValorItem())));
					}

					ecfvo.setItens(list);
					lsDadosRelatorio.add(ecfvo);
				}

				setLsDadosRelatorio(lsDadosRelatorio);

				Collections.sort(lsDadosRelatorio, new Comparator<ECFReducaoZVO>() {
					@Override
					public int compare(ECFReducaoZVO b1, ECFReducaoZVO b2) {
						if (b1.getDatamov().equals(b2.getDatamov())) {
							return b1.getNumserie20().compareTo(b2.getNumserie20());
						} else {
							return b1.getDatamov().compareTo(b2.getDatamov());
						}
					}
				});
			}
		});
	}

	private BigDecimal padronizaValor(BigDecimal valor) {
		return valor.divide(UtiliteriasFiscal.CEM);
	}

	private String padronizaData(String data) {
		return DateUtil.changeFormatStringDate(data, "yyyyMMdd", "dd/MM/yyyy");
	}

	public void setLsDadosRelatorio(List<ECFReducaoZVO> lsDadosRelatorio) {
		this.setCollectionDataSource(new JRBeanCollectionDataSource(lsDadosRelatorio));
		this.lsDadosRelatorio = lsDadosRelatorio;
	}

	@Override
	protected void processaParametros() throws Exception {
	}

}
