import org.mariadb.jdbc.*;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class DonjonBD implements Donjon {

    private int idPiece;
    private int contenu;
    private Connection connexion;

    public DonjonBD(){
        try{
            this.ouvrirConnexion();
            PreparedStatement requete = this.connexion.prepareStatement(
            "SELECT idPiece,contenu FROM Piece");
            ResultSet resultat = requete.executeQuery();
            requete.close();
            if (resultat.next()){
                this.idPiece = resultat.getInt("idPiece");
                this.contenu = resultat.getInt("contenu");
            }
            resultat.close();
        }
        catch(SQLException e){
            System.out.println(e);
            this.fermerConnexion();
        }
    }

    @Override
    public Piece apres(){
        try{
            PreparedStatement requete = this.connexion.prepareStatement(
            "SELECT idPiece,contenu FROM Piece WHERE idPiece=(Select apres FROM Piece WHERE idPiece=?)");
            requete.setInt(1, this.idPiece);
            ResultSet resultat = requete.executeQuery();
            requete.close();
            if (resultat.next()){
                this.idPiece = resultat.getInt("idPiece");
                this.contenu = resultat.getInt("contenu");
            }
            resultat.close();
            return new PieceConcrete(this.contenu);
        }
        catch(SQLException e){
            return null;
        }
    }

    @Override
    public Piece avant(){
        try{
            PreparedStatement requete = this.connexion.prepareStatement(
            "SELECT idPiece,contenu FROM Piece WHERE apres=?");
            requete.setInt(1, this.idPiece);
            ResultSet resultat = requete.executeQuery();
            requete.close();
            if (resultat.next()){
                this.idPiece = resultat.getInt("idPiece");
                this.contenu = resultat.getInt("contenu");
            }
            resultat.close();
            return new PieceConcrete(this.contenu);
        }
        catch(SQLException e){
            return null;
        }
    }

    @Override
    public Piece ici() {
        return new PieceConcrete(this.contenu);
    }

    public void fermerConnexion(){
        try {
            this.connexion.close();
        } catch (SQLException e) {
        }
    }

    public void ouvrirConnexion() throws SQLException {
        try {
            try {
                Class.forName("org.mariadb.jdbc.Driver");
            } catch (ClassNotFoundException e) {
                throw new RuntimeException("ClassNotFoundException", e);
            }
            this.connexion = DriverManager.getConnection(
                    "jdbc:mariadb://dwarves.iut-fbleau.fr/williatt",
                    "williatt", "OscarSQL92");
        } catch (SQLException e) {
            throw new SQLException("Connexion au serveur impossible ! Verifiez votre connexion internet puis reessayez",
                    e);
        }
    }
}