package net.h4ckx0r.controlador;

import net.h4ckx0r.modelo.Profesor;

import java.sql.*;

public class ControladorProfesor {
    public static Profesor getPrimerProfesor() {
        Connection conn = GestorConexiones.getConexion();

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

            if (rs.next()) {
                return new Profesor(
                        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"),
                        rs.getBytes("imagen"),
                        rs.getString("colorPreferido")
                );
            }

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

        return null;
    }

    public static Profesor getUltimoProfesor() {
        Connection conn = GestorConexiones.getConexion();

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

            if (rs.next()) {
                return new Profesor(
                        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"),
                        rs.getBytes("imagen"),
                        rs.getString("colorPreferido")
                );
            }

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

        return null;
    }

    public static Profesor getSiguienteProfesor(Profesor profesorActual) {
        Connection conn = GestorConexiones.getConexion();

        try {
            PreparedStatement pst = conn.prepareStatement("SELECT * FROM profesor WHERE id > ? LIMIT 1");
            pst.setInt(1, profesorActual.getId());
            ResultSet rs = pst.executeQuery();
            if (rs.next()) {
                return new Profesor(
                        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"),
                        rs.getBytes("imagen"),
                        rs.getString("colorPreferido")
                );
            }

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

        return null;

    }

    public static Profesor getAnteriorProfesor(Profesor profesorActual) {
        Connection conn = GestorConexiones.getConexion();

        try {
            PreparedStatement pst = conn.prepareStatement("SELECT * FROM profesor WHERE id < ? ORDER BY id DESC LIMIT 1");
            pst.setInt(1, profesorActual.getId());
            ResultSet rs = pst.executeQuery();
            if (rs.next()) {
                return new Profesor(
                        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"),
                        rs.getBytes("imagen"),
                        rs.getString("colorPreferido")
                );
            }

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

        return null;

    }

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

    public static int guardarProfesor(Profesor profesor) {
        if (profesor.getId() == -1) {
            profesor.setId(getUltimoProfesor().getId() + 1);
            return nuevoProfesor(profesor);
        }
        Connection conn = GestorConexiones.getConexion();
        try {
            PreparedStatement pst = conn.prepareStatement("UPDATE profesor SET nombre = ?, apellido1 = ?, apellido2 = ?, dni = ?, direccion = ?, email = ?, telefono = ?, idTipologiaSexo = ?, imagen = ?, colorPreferido = ? WHERE id = ?");
            pst.setString(1, profesor.getNombre());
            pst.setString(2, profesor.getApellido1());
            pst.setString(3, profesor.getApellido2());
            pst.setString(4, profesor.getDni());
            pst.setString(5, profesor.getDireccion());
            pst.setString(6, profesor.getEmail());
            pst.setString(7, profesor.getTelefono());
            pst.setInt(8, profesor.getIdTipologiaSexo());
            pst.setBytes(9, profesor.getImagen());
            pst.setString(10, profesor.getColorPreferido());
            pst.setInt(11, profesor.getId());
            return pst.executeUpdate();
        } catch (SQLException e) {
            return 0;
            //throw new RuntimeException(e);
        }
    }

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