package com.rjconsultores.ventaboletos.dao.hibernate.sqlfunction;

import java.util.List;

import org.hibernate.QueryException;
import org.hibernate.dialect.function.SQLFunction;
import org.hibernate.engine.Mapping;
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.type.IntegerType;
import org.hibernate.type.Type;

import com.rjconsultores.ventaboletos.dao.util.DBUtil;

public class FnArredondamentoTarifa implements SQLFunction {

	@Override
	public Type getReturnType(Type arg0, Mapping arg1) throws QueryException {
		return new IntegerType();
	}

	@Override
	public boolean hasArguments() {
		return true;
	}

	@Override
	public boolean hasParenthesesIfNoArguments() {
		return true;
	}

	
	public String render(List args, SessionFactoryImplementor arg1) throws QueryException {
		if (args.size() != 6) {
			throw new QueryException("Para o arredondamento de preço são necessário 6 parametros");
		}
		
		if (DBUtil.getInstance().isOracle()){
			return " FN_ARREDONDAMENTO_TARIFA(" + args.get(0) + ", " + args.get(1) + ", " + args.get(2) +", " + args.get(3) +", " + args.get(4) +", " + args.get(5) + ")";	
		}
		
		throw new QueryException("Ainda não existe a traduação da Função de arredondamento para o banco usado");
		
	}

	
	public String render(Type arg0, List arg1, SessionFactoryImplementor arg2) throws QueryException {
		return render(arg1, arg2);
	}
}