package no.valg.valgnatt.mottak;

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

import javax.annotation.Resource;
import javax.sql.DataSource;

import no.valg.valgnatt.common.ValgnattException;
import no.valg.valgnatt.database.dao.StemmekretsDao;
import no.valg.valgnatt.database.dao.StemmeskjemaDao;
import no.valg.valgnatt.database.hibernate.Stemmekrets;
import no.valg.valgnatt.database.hibernate.Stemmeskjema;

import org.springframework.jdbc.datasource.DataSourceUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Transactional
@Service
public class MottakService {

	@Resource
	private StemmeskjemaDao stemmeskjemaDao;
	@Resource
	private StemmekretsDao stemmekretsDao;
	@Resource
	private DataSource dataSource;


	// Gjorde om fra Hibernate til JDBC, økte ytelsen med 30-40% (sparer
	// en del tid i testingen av systemet, ikke viktig under faktisk valgkjøring)
	public void lagreStemmeskjema(Stemmeskjema stemmeskjema) {
		Connection con = DataSourceUtils.getConnection(dataSource);
		try {
			PreparedStatement ps = con.prepareStatement("INSERT INTO stemmeskjema (valideringstatus, valgtype, data) VALUES (?,?,?) RETURNING ID");
			ps.setString(1, stemmeskjema.getValideringstatus().name());
			ps.setString(2, stemmeskjema.getValgType().name());
			ps.setString(3, stemmeskjema.getData());
			ResultSet rs = ps.executeQuery();
			rs.next();
			stemmeskjema.setId(rs.getInt(1));
			rs.close();
		} catch (SQLException sqle) {
			throw new ValgnattException(sqle);
		} finally {
			DataSourceUtils.releaseConnection(con, dataSource);
		}
	}


	public Stemmeskjema getById(int refId) {
		return stemmeskjemaDao.get(refId);
	}

	public int getMaxRefId() {
		return stemmeskjemaDao.getMaxRefId();
	}

	public void oppdaterStemmekrets(Stemmekrets stemmekrets) {
		stemmekretsDao.update(stemmekrets);
	}
}
