package com.mycompany.app.util;

import com.mycompany.app.Jugador;

import java.sql.*;

public class ConexionBaseDatos {
    private static final String url = "jdbc:postgresql://ruby.db.elephantsql.com:5432/qbpxpgrg";
    private static final String usuario = "qbpxpgrg";
    private static final String password = "aRD3vNUazwIZSU2ZakbnK_hGN-VELQaD";
    private static Connection connection;

    public static Connection getInstance() throws SQLException {
        if (connection == null) {
            connection = DriverManager.getConnection(url, usuario, password);
        }
        return connection;
    }

    public Jugador consultarSaldo(String nombre) throws SQLException {
        Jugador jugador = new Jugador();
        try {
            Connection conn = new ConexionBaseDatos().getInstance();
            Statement declaracion = conn.createStatement();
            ResultSet resultado = declaracion.executeQuery("SELECT * FROM usuarios WHERE nombre = '" + nombre + "'");
            while (resultado.next()) {
                System.out.println("El saldo de jugador " + resultado.getString("nombre") + " es de " + resultado.getString("saldo"));
                jugador.setSaldo(Float.valueOf(resultado.getString("saldo")));
                jugador.setNombre(resultado.getString("nombre"));
            }
            declaracion.close();
            resultado.close();
        } catch (SQLException e) {
            System.err.format("SQL State: %s\n%s", e.getSQLState(), e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return jugador;
    }
    public Jugador insertarSaldo(String nombre, Float saldo) throws SQLException {
        Jugador jugador = new Jugador();
        try {
            Connection conn = new ConexionBaseDatos().getInstance();
            Statement declaracion = conn.createStatement();
            declaracion.executeQuery("INSERT INTO usuarios (nombre, saldo) VALUES ('" + nombre + "','" + saldo + "')");
            declaracion.close();
        } catch (SQLException e) {
            System.err.format("SQL State: %s\n%s", e.getSQLState(), e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return jugador;
    }

    public void actualizarSaldo(String nombre, Float saldo) throws SQLException {
        try {
            Connection conn = new ConexionBaseDatos().getInstance();
            Statement declaracion = conn.createStatement();
            ResultSet resultado = declaracion.executeQuery("SELECT * FROM usuarios WHERE nombre = '" + nombre + "'");
            while (resultado.next()) {
                if(!resultado.getString("nombre").equals(nombre)){
                    System.out.println("El usuario no existe");
                }else{
                    declaracion.executeQuery("UPDATE usuarios SET saldo = " + saldo + " WHERE nombre = '" + nombre + "'");
                }
            }
        } catch (SQLException e) {
            System.err.format("SQL State: %s\n%s", e.getSQLState(), e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void consultarResultados(String jugador) throws SQLException {
        try {
            Connection conn = new ConexionBaseDatos().getInstance();
            Statement declaracion = conn.createStatement();
            ResultSet resultado = declaracion.executeQuery("SELECT * FROM resultados WHERE jugador = '" + jugador + "'");
            while (resultado.next()) {
                System.out.println("El nombre del jugador es " + resultado.getString("jugador") + " y su puntuacion es de " + resultado.getString("puntuacion"));
            }
        } catch (SQLException e) {
            System.err.format("SQL State: %s\n%s", e.getSQLState(), e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void insertarResultados(String jugador, Float puntuacion) throws SQLException {
        try {
            Connection conn = new ConexionBaseDatos().getInstance();
            Statement declaracion = conn.createStatement();
            declaracion.executeQuery("INSERT INTO resultados (puntuacion, jugador) VALUES ('" + puntuacion + "','" + jugador + "')");
            declaracion.close();
        } catch (SQLException e) {
            System.err.format("SQL State: %s\n%s", e.getSQLState(), e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
