package com.rjconsultores.ventaboletos.dao.sqlbuilder;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.rjconsultores.ventaboletos.constantes.TipoSeguro;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.OrgaoConcedente;

/**
 * Interface que indica quais são os SQL nativos da aplicação.
 * 
 * Cada método representa um SQL nativo que deve ser implementado de acordo com a base de dados.
 * 
 * O padrão para a clase é retornar o SQL nativo para o conjunto de parametros
 * 
 * 
 * @author gleimar
 * 
 */
public interface SQLBuilder {

	public String getSQLGerarTarifaOficial(Integer codRuta, Integer usuarioId, OrgaoConcedente orgaoConcedente, List<Integer> idsEmpresas, Integer[] listCasetaPeaje);

	public String getSQLGerarTabelaZerada(Integer codRuta, Integer usuarioId, Integer orgaoConcedenteId, List<Integer> idsEmpresas, List<Integer> lsParadaId);

	public String getSQLAtualizarTarifaOficial(Integer rutaId, Integer usuarioId, OrgaoConcedente orgaoConcedente);

	public String getSQLGerarTarifaOficialArtesp(Integer codRuta, Integer usuarioId,
			Integer orgaoConcedenteId, List<Integer> idsEmpresas);

	public String getAtualizarTaxaEmbarquePorKmParada(Integer rutaId, Integer usuarioId, Integer orgaoConcedenteId, List<Integer> idsEmpresas,List<Integer>lsParadaIds);

	public String getSQLAtualizarTaxaEmbarquePorKmOrgao(Integer rutaId, Integer usuarioId, Integer orgaoConcedenteId, List<Integer> idsEmpresas, List<Integer> lsParadaIds);

	public String getSQLAtualizarTaxaEmbarquePorParadaFixo(Integer rutaId, Integer usuarioId,Integer orgaoConcedenteId, List<Integer> idsEmpresas,List<Integer> lsParadaIds);

	public String getSQLAtualizarSeguroPorKm(Integer rutaId, Integer usuarioId, Integer orgaoConcedenteId, TipoSeguro tipoSeguro);

	public String getSQLAtualizarSeguroPorTarifa(Integer rutaId, Integer usuarioId, Integer orgaoConcedenteId);

	public String getSQLSelecionarTarifaPorTarifaOficalParaAtualizar(Integer vigenciaTarifaId, Empresa empresa, OrgaoConcedente orgao);
	
	public String getSQLAtualizarTarifaPorTarifaOfical(Map<String,Object> dados, Integer usuarioId, Boolean calculaPegagio, Boolean calculaTarifa, Boolean calculaTaxaEmbarque, Boolean calculaSeguro, Boolean calculaTPP);
	
	public String getSQLInserirTarifaPelaTarifaOficial(Integer vigenciaTarifaId, Integer usuarioId, Empresa empresa, OrgaoConcedente orgao);

	public String getSQLActualizarCorridaFecHusoFecVerano();

	public String getSQLActualizarCorridaTramoFecHusoFecVerano();

	public String getSQLBuscarCajaFecha(boolean yaCerrado, Date fechaDesde, Date fechaHasta);

	public String getSQLBuscarUsuariosCajaCerrado(Date fecha, String cveusuario, String turnoid);

	public String getSQLBuscarCajaCerrado(Integer usuarioId, Date fecha, String turnoid);
	
	public String getSQLBuscarReceitasDespesasCaja(Integer usuarioId, Date fec);

	public String getSQLBuscarUsuariosActivo();
	
	public String getSQLAtualizarPrecioPorTPP(final Integer rutaId, final Integer usuarioId,
			final Integer orgaoConcedenteId, TipoSeguro tipoSeguro);

	/**
	 * Venda Embarcada
	 * @return Retorna a Query para a inserção dos valores da venda na tabela de Caja
	 */
	public String getSQLInserirCajaVendaEmbarcada();
	
	/**
	 * Venda Embarcada
	 * @return Retorna a Query para a inserção dos valores da venda na tabela de CajaFormaPago 
	 */
	public String getSQLInserirCajaFormaPagoVendaEmbarcada();
	
	/**
	 * Venda Embarcada
	 * 
	 * @return Retorna a Query para a inserção dos valores da venda na tabela de Boleto
	 */
	public String getSQLInserirBoletoVendaEmbarcada();
	
	/**
	 * Venda Embarcada
	 * @return Retorna a Query para a inserção dos valores da venda na tabela de BoletoFormaPago
	 */
	public String getSQLInserirBoletoFormaPagoVendaEmbarcada();
	
	/**
	 * 
	 * @return Retorna o valor gerado pela sequence para a tabela BoletoFormaPago
	 */
	public String getSQLObterSequenceBoletoFormaPago();
	
	/**
	 * 
	 * @return Retorna o valor gerado pela sequence para a tabela CajaFormaPago
	 */
	public String getSQLObterSequenceCajaFormaPago();
	
	/**
	 * 
	 * @return Retorna o valor gerado pela sequence da tabela Boleto 
	 */
	public String getSQLObterSequenceBoleto();
	
	/**
	 * 
	 * @return Retorna o valor gerado pela sequence da tabela Caja
	 */
	public String getSQLObterSequenceCaja();
	
	/**
	 * 
	 * @return Retorna o valor gerado pela sequence do Numero de Operacao
	 */
	public String getSQLObterSequenciaNumOperacion();

	public String getSQLBuscarDatosCaja(Date fechaDesde, Date fechaHasta, Boolean sembilhetesPacote);

	public String getSQLInserirTarifaEmbarcadaPelaTarifaOficial(Integer vigenciaTarifaId, Integer usuarioId, Empresa empresa, OrgaoConcedente orgao);
	
	public String getSQLSelecionarTarifaEmbarcadaPorTarifaOficalParaAtualizar(Integer vigenciaTarifaId, Empresa empresa, OrgaoConcedente orgao);
	
	public String getSQLAtualizarTarifaEmbarcadaPorTarifaOfical(Map<String,Object> dados, Integer usuarioId, Boolean calculaPegagio, Boolean calculaTarifa, Boolean calculaTaxaEmbarque, Boolean calculaSeguro, Boolean calculaTPP);
  
    public String getSqlRemoverDuplicidadeNaTarifaOficial();
}
