package net.h4ckx0r.controlador;

import net.h4ckx0r.modelo.Estudiante;

import java.sql.*;

public class ControladorEstudiante {
    public static Estudiante getPrimerEstudiante() {
        Connection conn = GestorConexiones.getConexion();

        try {
            Statement st = conn.createStatement();
            ResultSet rs = st.executeQuery("SELECT * FROM estudiante LIMIT 1");

            if (rs.next()) {
                return new Estudiante(
                        rs.getInt("id"),
                        rs.getString("nombre"),
                        rs.getString("apellido1"),
                        rs.getString("apellido2"),
                        rs.getString("dni"),
                        rs.getString("direccion"),
                        rs.getString("email"),
                        rs.getString("telefono"),
                        rs.getInt("idTipologiaSexo")
                );
            }

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

        return null;
    }

    public static Estudiante getUltimoEstudiante() {
        Connection conn = GestorConexiones.getConexion();

        try {
            Statement st = conn.createStatement();
            ResultSet rs = st.executeQuery("SELECT * FROM estudiante ORDER BY id DESC LIMIT 1");

            if (rs.next()) {
                return new Estudiante(
                        rs.getInt("id"),
                        rs.getString("nombre"),
                        rs.getString("apellido1"),
                        rs.getString("apellido2"),
                        rs.getString("dni"),
                        rs.getString("direccion"),
                        rs.getString("email"),
                        rs.getString("telefono"),
                        rs.getInt("idTipologiaSexo")
                );
            }

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

        return null;
    }

    public static Estudiante getSiguienteEstudiante(Estudiante estudianteActual) {
        Connection conn = GestorConexiones.getConexion();

        try {
            PreparedStatement pst = conn.prepareStatement("SELECT * FROM estudiante WHERE id > ? LIMIT 1");
            pst.setInt(1, estudianteActual.getId());
            ResultSet rs = pst.executeQuery();
            if (rs.next()) {
                return new Estudiante(
                        rs.getInt("id"),
                        rs.getString("nombre"),
                        rs.getString("apellido1"),
                        rs.getString("apellido2"),
                        rs.getString("dni"),
                        rs.getString("direccion"),
                        rs.getString("email"),
                        rs.getString("telefono"),
                        rs.getInt("idTipologiaSexo")
                );
            }

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

        return null;

    }

    public static Estudiante getAnteriorEstudiante(Estudiante estudianteActual) {
        Connection conn = GestorConexiones.getConexion();

        try {
            PreparedStatement pst = conn.prepareStatement("SELECT * FROM estudiante WHERE id < ? ORDER BY id DESC LIMIT 1");
            pst.setInt(1, estudianteActual.getId());
            ResultSet rs = pst.executeQuery();
            if (rs.next()) {
                return new Estudiante(
                        rs.getInt("id"),
                        rs.getString("nombre"),
                        rs.getString("apellido1"),
                        rs.getString("apellido2"),
                        rs.getString("dni"),
                        rs.getString("direccion"),
                        rs.getString("email"),
                        rs.getString("telefono"),
                        rs.getInt("idTipologiaSexo")
                );
            }

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

        return null;

    }

    public static int borrarEstudiante(Estudiante estudiante) {
        Connection conn = GestorConexiones.getConexion();
        try {
            PreparedStatement pst = conn.prepareStatement("DELETE FROM estudiante WHERE id = ?");
            pst.setInt(1, estudiante.getId());
            return pst.executeUpdate();
        } catch (SQLException e) {
            return 0;
            //throw new RuntimeException(e);
        }
    }

    public static int guardarEstudiante(Estudiante estudiante) {
        if (estudiante.getId() == -1) {
            estudiante.setId(getUltimoEstudiante().getId() + 1);
            return nuevoEstudiante(estudiante);
        }
        Connection conn = GestorConexiones.getConexion();
        try {
            PreparedStatement pst = conn.prepareStatement("UPDATE estudiante SET nombre = ?, apellido1 = ?, apellido2 = ?, dni = ?, direccion = ?, email = ?, telefono = ?, idTipologiaSexo = ? WHERE id = ?");
            pst.setString(1, estudiante.getNombre());
            pst.setString(2, estudiante.getApellido1());
            pst.setString(3, estudiante.getApellido2());
            pst.setString(4, estudiante.getDni());
            pst.setString(5, estudiante.getDireccion());
            pst.setString(6, estudiante.getEmail());
            pst.setString(7, estudiante.getTelefono());
            pst.setInt(8, estudiante.getIdTipologiaSexo());
            pst.setInt(9, estudiante.getId());
            return pst.executeUpdate();
        } catch (SQLException e) {
            return 0;
            //throw new RuntimeException(e);
        }
    }

    public static int nuevoEstudiante(Estudiante estudiante) {
        Connection conn = GestorConexiones.getConexion();
        try {
            PreparedStatement pst = conn.prepareStatement("INSERT INTO estudiante (id,nombre,apellido1,apellido2,dni,direccion,email,telefono,idTipologiaSexo) VALUES (?,?,?,?,?,?,?)");
            pst.setInt(1, estudiante.getId());
            pst.setString(2, estudiante.getNombre());
            pst.setString(3, estudiante.getApellido1());
            pst.setString(4, estudiante.getApellido2());
            pst.setString(5, estudiante.getDni());
            pst.setString(6, estudiante.getDireccion());
            pst.setString(7, estudiante.getEmail());
            pst.setString(8, estudiante.getTelefono());
            pst.setInt(9, estudiante.getIdTipologiaSexo());
            return pst.executeUpdate();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}
