package com.rjconsultores.ventaboletos.dao.hibernate;

import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Date;

import org.apache.logging.log4j.LogManager;

import org.apache.logging.log4j.Logger;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import com.rjconsultores.ventaboletos.dao.ContaCorrenteAgenciaDAO;
import com.rjconsultores.ventaboletos.entidad.ContaCorrentePtoVta;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.entidad.TipoOperacionCC;
import com.rjconsultores.ventaboletos.entidad.Turno;
import com.rjconsultores.ventaboletos.entidad.Usuario;
import com.rjconsultores.ventaboletos.exception.BusinessException;

@Repository("contaCorrenteAgenciaDAO")
public class ContaCorrenteAgenciaHibernateDAO extends GenericHibernateDAO<ContaCorrentePtoVta, Long> implements ContaCorrenteAgenciaDAO {
	
	private static final Logger log = LogManager.getLogger(ContaCorrenteAgenciaHibernateDAO.class);
	
	@Autowired
	public ContaCorrenteAgenciaHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) {
		setSessionFactory(factory);
	}

	@Override
	@Transactional
	public ContaCorrentePtoVta gravarContaCorrente(Integer puntoVentaId, String descOperacion, Date fecCorte, Integer usuarioId, Integer tipoOperacionCCId, Integer empresaId, short turnoId, BigDecimal importeTotalTarifa, BigDecimal importeTotalPedagio, BigDecimal importeTotalTasaAbordaje, BigDecimal importeTotalSeguro, BigDecimal importeTotalIngreso, BigDecimal importeTotalEgreso, BigDecimal importeTotalDevolucion, BigDecimal importeTotalTransferencia, BigDecimal importeFinal, boolean corteAutomatico, BigDecimal totalVentaSegOpcional, BigDecimal totalCancSegOpcional, BigDecimal importeTotalEfectivo) throws BusinessException {
		try {

			ContaCorrentePtoVta ccPtoVta = new ContaCorrentePtoVta();
			ccPtoVta.setActivo(Boolean.TRUE);
			ccPtoVta.setDescOperacion(descOperacion);
			ccPtoVta.setEmpresa(new Empresa(empresaId));
			ccPtoVta.setFecmodif(Calendar.getInstance().getTime());
			ccPtoVta.setImporteTotalTarifa(importeTotalTarifa);
			ccPtoVta.setImporteTotalPedagio(importeTotalPedagio);
			ccPtoVta.setImporteTotalTasaAbordaje(importeTotalTasaAbordaje);
			ccPtoVta.setImporteTotalSeguro(importeTotalSeguro);
			ccPtoVta.setImporteTotalIngreso(importeTotalIngreso);
			ccPtoVta.setImporteTotalEgreso(importeTotalEgreso);
			ccPtoVta.setImporteTotalDevolucion(importeTotalDevolucion);
			ccPtoVta.setImporteTotalTransferencia(importeTotalTransferencia);
			ccPtoVta.setImporte(importeFinal);
			ccPtoVta.setImporteTotalEfectivo(importeTotalEfectivo);
			ccPtoVta.setPuntoVenta(new PuntoVenta(puntoVentaId));
			ccPtoVta.setTurno(new Turno(turnoId));
			ccPtoVta.setUsuarioModifId(usuarioId);
			ccPtoVta.setUsuario(new Usuario(usuarioId));
			ccPtoVta.setTipoOperacionCC(new TipoOperacionCC(tipoOperacionCCId));
			ccPtoVta.setFecCorte(fecCorte);
			ccPtoVta.setFecHorOperacion(fecCorte);
			ccPtoVta.setTotalVentaSegOpcional(totalVentaSegOpcional);
			ccPtoVta.setTotalCancSegOpcional(totalCancSegOpcional);
			ccPtoVta.setIndComissao(Boolean.TRUE);
			ccPtoVta.setImportetotalDebito(BigDecimal.ZERO);
			ccPtoVta.setImportetotalCredito(BigDecimal.ZERO);

			getSession().save(ccPtoVta);

			return ccPtoVta;

		} catch (Exception e) {
			log.error(e.getMessage(), e);
			throw new BusinessException(e.getMessage(), e);
		}
	}

}
