package de.tud.kom.socom.database.achievements;
import java.sql.SQLException;
import de.tud.kom.socom.components.achievements.Achievement;
import de.tud.kom.socom.components.achievements.AchievementProgress;
import de.tud.kom.socom.components.achievements.AchievementProgressMessage;
import de.tud.kom.socom.components.achievements.AchievementReward;
import de.tud.kom.socom.util.exceptions.AchievementAlreadyExistException;
import de.tud.kom.socom.util.exceptions.AchievementCategoryNotFoundException;
import de.tud.kom.socom.util.exceptions.AchievementLevelCountermaxInvalidException;
import de.tud.kom.socom.util.exceptions.AchievementLevelNotFoundException;
import de.tud.kom.socom.util.exceptions.AchievementNotFoundException;
import de.tud.kom.socom.util.exceptions.RewardAlreadyExistException;
import de.tud.kom.socom.util.exceptions.RewardNotFoundException;
/**
*
* @author ngerwien
*
*/
public interface AchievementDatabase {
public void addAchievement(Achievement achievement) throws SQLException, AchievementAlreadyExistException, AchievementNotFoundException;
public void addAchievementLevel(Achievement achievement) throws SQLException, AchievementLevelCountermaxInvalidException, AchievementNotFoundException, AchievementLevelNotFoundException;
public AchievementProgressMessage updateAchievementProgress(String achievementname, long gameID, long counter, long userID) throws SQLException, AchievementNotFoundException, AchievementLevelNotFoundException;
public void resetAchievementProgress(String achievementname, long gameID, long userID) throws SQLException, AchievementNotFoundException, AchievementLevelNotFoundException;
public void removeAchievement(String name, long gameID) throws SQLException, AchievementNotFoundException, AchievementCategoryNotFoundException, AchievementLevelNotFoundException;
public void addReward(AchievementReward reward) throws SQLException, RewardAlreadyExistException;
public void setAchievementReward(Achievement achievement, AchievementReward reward, int achievementlevel) throws SQLException, AchievementNotFoundException, RewardNotFoundException, AchievementLevelNotFoundException;
public Achievement getAchievement(String name, long gameID) throws SQLException, AchievementNotFoundException, AchievementCategoryNotFoundException, AchievementLevelNotFoundException;
public AchievementProgress getAchievementProgress(String name, long gameID, long userID) throws SQLException, AchievementNotFoundException, AchievementLevelNotFoundException;
}