package dao;
import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import business.Pari;
public class DaoPari {
/* ------------------------------------------------ REQUETES PRECOMPILEES */
private static CallableStatement statementGetPari = null;
private static CallableStatement statementGetParis = null;
private static CallableStatement statementAjouterPari = null;
/* --------------------------------------------------------- CONSTRUCTEUR */
static {
try {
statementGetPari = DbConnection.getInstance().prepareCall("{call getPari(?)}");
statementGetParis = DbConnection.getInstance().prepareCall("{call getParis(?)}");
statementAjouterPari = DbConnection.getInstance().prepareCall("{call ajouterPari(?, ?, ?, ?, ?, ?)}");
}
catch(SQLException e) {
e.printStackTrace();
}
}
/* -------------------------------------------------------------- METHODE */
public static Pari getPari(int id_pari) {
Pari pari = null;
try {
ResultSet rs = null;
synchronized(statementGetPari) {
statementGetPari.setInt(1, id_pari);
rs = statementGetPari.executeQuery();
}
if(rs != null && rs.last()) {
if(rs.getRow() == 1) {
pari = new Pari(
rs.getInt("id_pari"),
rs.getInt("fk_id_utilisateur"),
rs.getInt("fk_id_passageTrainTheorique"),
rs.getInt("mise"),
rs.getInt("retard"),
rs.getTimestamp("heurePari"),
rs.getInt("gainPossible"),
rs.getInt("etat"));
}
else {
System.err.println("DaoPari.getPari(" + id_pari + ") : plusieurs résultats.");
}
}
else {
System.err.println("DaoPari.getPari(" + id_pari + ") : aucun résultat.");
}
}
catch(SQLException e) {
e.printStackTrace();
return null;
}
return pari;
}
public static List<Pari> getParis(int id_utilisateur) {
List<Pari> paris = null;
try {
ResultSet rs = null;
synchronized(statementGetParis) {
statementGetParis.setInt(1, id_utilisateur);
rs = statementGetParis.executeQuery();
}
paris = new ArrayList<Pari>();
while(rs.next()) {
paris.add(new Pari(
rs.getInt("id_pari"),
rs.getInt("fk_id_utilisateur"),
rs.getInt("fk_id_passageTrainTheorique"),
rs.getInt("mise"),
rs.getInt("retard"),
rs.getTimestamp("heurePari"),
rs.getInt("gainPossible"),
rs.getInt("etat")));
}
}
catch (SQLException e) {
e.printStackTrace();
return null;
}
return paris;
}
public static boolean ajouterPari(int id_utilisateur, int fk_id_passageTrainTheorique, int mise, int retard) {
try {
Date heurePari = new Date(); //TODO voir pour récupérer l'heure actuelle depuis les serveurs de la SNCF
Date arriveeTheorique = DaoPassageTrainTheorique.getPassageTrainTheorique(fk_id_passageTrainTheorique).getArriveeTheorique();
long msPassageTrain = arriveeTheorique.getTime();
int minAvantPassage = (int) (msPassageTrain - heurePari.getTime()) / (60000);
double coefficient = (1.0 + (((double) retard)/3.0)) * (1.0 + (((double) Math.max(0.0, (minAvantPassage-10.0)))/50.0));
int gainPossible = (int) (mise * coefficient);
synchronized(statementAjouterPari) {
statementAjouterPari.setInt(1, id_utilisateur);
statementAjouterPari.setInt(2, fk_id_passageTrainTheorique);
statementAjouterPari.setInt(3, mise);
statementAjouterPari.setInt(4, retard);
statementAjouterPari.setTimestamp(5, new java.sql.Timestamp(heurePari.getTime()));
statementAjouterPari.setInt(6, gainPossible);
statementAjouterPari.execute();
}
}
catch(SQLException e) {
e.printStackTrace();
return false;
}
return true;
}
}