package com.rjconsultores.ventaboletos.dao.util;

import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.hibernate.HibernateException;

public class ClaseServicioStore {

	private static final Logger log = LogManager.getLogger(ClaseServicioStore.class);
	private static ClaseServicioStore INSTANCE = new ClaseServicioStore();
	protected int qtdMaxima = 99;

	private ClaseServicioStore() {

	}

	public static ClaseServicioStore getInstance() {
		return INSTANCE;
	}

	public synchronized Serializable getNextId(Connection connection) throws HibernateException {

		log.info(String.format("qtdMaxima:%s", qtdMaxima));
		Integer idEncontrado = 0;
		PreparedStatement ps;

		try {
			ps = connection.prepareStatement("select min(a.CLASESERVICIO_ID) as idEncontrado from CLASE_SERVICIO  a left join CLASE_SERVICIO b  on b.CLASESERVICIO_ID = (a.CLASESERVICIO_ID +1) where b.CLASESERVICIO_ID is null and a.CLASESERVICIO_ID<>-1");
			ResultSet rs = ps.executeQuery();
			rs.next();
			idEncontrado = rs.getInt("idEncontrado");
			if (idEncontrado == null)
				idEncontrado = 1;

		} catch (SQLException e) {
			log.error("erro ao buscar id clase_servicio", e);
			throw new HibernateException(e);
		}

		log.info("indiceAtual=" + idEncontrado);
		idEncontrado = idEncontrado + 1;
		log.info("idEncontrado=" + idEncontrado);
		if (idEncontrado > qtdMaxima) {
			throw new HibernateException("A qtd de IDs permitidos para clase_servicio foi atingido:" + qtdMaxima);
		}
		return idEncontrado;
	}

}
