package com.rjconsultores.ventaboletos.service.impl;

import java.io.UnsupportedEncodingException;
import java.util.Calendar;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.rjconsultores.ventaboletos.dao.ConfContratoPuntoVentaDAO;
import com.rjconsultores.ventaboletos.entidad.ConfContratoPuntoVenta;
import com.rjconsultores.ventaboletos.service.ConfContratoPuntoVentaService;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import com.rjconsultores.ventaboletos.utilerias.MoneyHelper;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.vo.configuracioneccomerciales.ConfLayoutContratoVO;

@Service("confContratoPuntoVentaService")
public class ConfContratoPuntoVentaServiceImpl implements ConfContratoPuntoVentaService {

	@Autowired
	private ConfContratoPuntoVentaDAO confContratoPuntoVentaDAO;

	@Override
	public List<ConfContratoPuntoVenta> obtenerTodos() {
		return confContratoPuntoVentaDAO.obtenerTodos();
	}

	@Override
	public ConfContratoPuntoVenta obtenerID(Integer id) {
		return confContratoPuntoVentaDAO.obtenerID(id);
	}

	@Transactional
	public ConfContratoPuntoVenta suscribir(ConfContratoPuntoVenta	 entidad) {
		entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
		entidad.setFecmodif(Calendar.getInstance().getTime());
		entidad.setActivo(Boolean.TRUE);

		return confContratoPuntoVentaDAO.suscribir(entidad);
	}

	@Transactional
	public ConfContratoPuntoVenta actualizacion(ConfContratoPuntoVenta entidad) {
		entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
		entidad.setFecmodif(Calendar.getInstance().getTime());
		entidad.setActivo(Boolean.TRUE);

		return confContratoPuntoVentaDAO.actualizacion(entidad);
	}

	@Transactional
	public void borrar(ConfContratoPuntoVenta entidad) {
		entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
		entidad.setFecmodif(Calendar.getInstance().getTime());
		entidad.setActivo(Boolean.FALSE);

		confContratoPuntoVentaDAO.actualizacion(entidad);
	}

	@Override
	public ConfLayoutContratoVO buscarInformacoesPontoVendaparaGerarContratos(Integer puntoVentaId, Integer empresaId) {		
		 return  confContratoPuntoVentaDAO.buscarInformacoesPontoVendaparaGerarContratos(puntoVentaId, empresaId );
	}


	@Override
	public String formatarLayout(ConfLayoutContratoVO confLayoutContratoVO, String html) {
		
		StringBuilder htmlFormatado = new StringBuilder();
		criarCabecalho(htmlFormatado);
		html = html.replace("{nomeLocalidade}", confLayoutContratoVO.getNomeLocalidade())
				.replace("{CNPJ}", confLayoutContratoVO.getCNPJ())
				.replace("{dataAbertura}", confLayoutContratoVO.getDataAbertura() != null ? DateUtil.getStringDate(confLayoutContratoVO.getDataAbertura(), "dd/MM/yyyy") : "")
				.replace("{razaoSocial}", confLayoutContratoVO.getRazaoSocial())
				.replace("{nomeCidade}", confLayoutContratoVO.getNomeCidade())
				.replace("{email}", confLayoutContratoVO.getEmail())
				.replace("{codigoPostal}", confLayoutContratoVO.getCodigoPostal())
				.replace("{numero}", confLayoutContratoVO.getNumero() != null ? confLayoutContratoVO.getNumero() : "")
				.replace("{passagemAlta}", confLayoutContratoVO.getPassagemAlta() != null ? MoneyHelper.getValor(confLayoutContratoVO.getPassagemAlta()) : "0")
				.replace("{passagemBaixa}", confLayoutContratoVO.getPassagemBaixa() != null ? MoneyHelper.getValor(confLayoutContratoVO.getPassagemBaixa()) : "0")
				.replace("{seguroObrigatorioBaixa}", confLayoutContratoVO.getSeguroObrigatorioBaixa() != null ? MoneyHelper.getValor(confLayoutContratoVO.getSeguroObrigatorioBaixa()) : "0")
				.replace("{seguroObrigatorioAlta}", confLayoutContratoVO.getSeguroObrigatorioAlta() != null ? MoneyHelper.getValor(confLayoutContratoVO.getSeguroObrigatorioAlta()) : "0")
				.replace("{valorVendaGapBaixa}", confLayoutContratoVO.getValorVendaGapBaixa() != null ? MoneyHelper.getValor(confLayoutContratoVO.getValorVendaGapBaixa()) : "0")
				.replace("{valorVendaGapAlta}", confLayoutContratoVO.getValorVendaGapAlta() != null ? MoneyHelper.getValor(confLayoutContratoVO.getValorVendaGapAlta()) : "0")
				.replace("{valorVendaGapBaixaImp}", confLayoutContratoVO.getValorVendaGapBaixaImp() != null ? MoneyHelper.getValor(confLayoutContratoVO.getValorVendaGapBaixaImp()) : "0")
				.replace("{valorVendaGapAltaImp}", confLayoutContratoVO.getValorVendaGapAltaImp() != null ? MoneyHelper.getValor(confLayoutContratoVO.getValorVendaGapAltaImp()) : "0")
				.replace("{seguroBaixa}", confLayoutContratoVO.getSeguroBaixa() != null ? MoneyHelper.getValor(confLayoutContratoVO.getSeguroBaixa()) : "0")
				.replace("{seguroAlta}", confLayoutContratoVO.getSeguroAlta()!= null ?  MoneyHelper.getValor(confLayoutContratoVO.getSeguroAlta()) : "0")
				.replace("{outrosBaixa}", confLayoutContratoVO.getOutrosBaixa() != null ? MoneyHelper.getValor(confLayoutContratoVO.getOutrosBaixa()) : "0")
				.replace("{outrosAlta}", confLayoutContratoVO.getOutrosAlta() != null ? MoneyHelper.getValor(confLayoutContratoVO.getOutrosAlta()) : "0")
				.replace("{excessoBaixa}", confLayoutContratoVO.getExcesssoBaixa() != null ? MoneyHelper.getValor(confLayoutContratoVO.getExcesssoBaixa()): "0")
				.replace("{excessoAlta}", confLayoutContratoVO.getExcesssoAlta() != null ? MoneyHelper.getValor(confLayoutContratoVO.getExcesssoAlta()) :"0")
				.replace("{nomeTitular}", confLayoutContratoVO.getNomeTitular())
				.replace("{nomeBanco}", confLayoutContratoVO.getNomeBanco())
				.replace("{numeroAgencia}", confLayoutContratoVO.getNumeroAgencia())
				.replace("{numeroConta}", confLayoutContratoVO.getNumeroConta())
				.replace("{tipoSocio}", confLayoutContratoVO.getTipoSocio() != null ?  confLayoutContratoVO.getTipoSocio() : "")
				.replace("{bairro}", confLayoutContratoVO.getBairro() != null ? confLayoutContratoVO.getBairro()  : "" )
				.replace("{rua}", confLayoutContratoVO.getRua()  != null ? confLayoutContratoVO.getRua()  : "" );
		
		htmlFormatado.append(formatarUTF(html));
		htmlFormatado.append("</html>");
		

		
		return htmlFormatado.toString();
	}

	private void criarCabecalho(StringBuilder htmlFormatado) {
		
		htmlFormatado.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?> ");
		htmlFormatado.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
		htmlFormatado.append("<html>");
	}
	
	private String formatarUTF(String html) {
		
		String output = "";
		try {
	        output = new String(html.getBytes("UTF-8"), "ISO-8859-1");
	    } catch (UnsupportedEncodingException e) {
	        e.printStackTrace();
	    }
		return output;	
	}

}
