package edu.ncsu.csc.itrust.action;

import edu.ncsu.csc.itrust.dao.DAOFactory;
import edu.ncsu.csc.itrust.dao.mysql.AccessDAO;
import edu.ncsu.csc.itrust.exception.DBException;
import edu.ncsu.csc.itrust.exception.FormValidationException;

/**
 * Used to change the session timeout, sessionTimeout.jsp. Note that a change to this timeout only gets
 * reflected on new sessions.
 * 
 */
public class ChangeSessionTimeoutAction {
	private AccessDAO accessDAO;

	/**
	 * Sets up defualts.
	 * 
	 * @param factory
	 */
	public ChangeSessionTimeoutAction(DAOFactory factory) {
		this.accessDAO = factory.getAccessDAO();
	}

	/**
	 * Changes the session timeout, the complicated logic of this is somewhat regrettably in the DAO,
	 * {@link AccessDAO}
	 * 
	 * @param minuteString
	 *            Pass the number of minutes in the form of a string, greater than 0.
	 * @throws FormValidationException
	 * @throws DBException
	 */
	public void changeSessionTimeout(String minuteString) throws FormValidationException, DBException {
		try {
			Integer minutes = Integer.valueOf(minuteString);
			if (minutes < 1)
				throw new FormValidationException("Must be a number greater than 0");
			accessDAO.setSessionTimeoutMins(minutes);
		} catch (NumberFormatException e) {
			throw new FormValidationException("That is not a number");
		}
	}

	/**
	 * Returns the current session timeout in minutes, as reflected in the database
	 * 
	 * @return the number of minutes it would take for an inactive session to timeout
	 * @throws DBException
	 */
	public int getSessionTimeout() throws DBException {
		return accessDAO.getSessionTimeoutMins();
	}
}