package com.ryuuji.visual.pZone.profesor;

import com.ryuuji.visual.pZone.PZone;
import logica.ExNihilo;
import logica.Listas;
import logica.Search;
import orm.Profesor;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class ProfesorAnalizar extends JFrame {
    private JTable profesores;
    private JButton crearButton;
    private JPanel mainPanel;
    private JLabel errorNoSeleccionado;
    private JButton eliminarButton;
    private JTable asignaturas;
    private JButton salirButton;

    private Profesor profesor;

    /**
     * Inicia la ventana asignandole sus valores basicos, llama ademas a los metodos init.
     */
    public ProfesorAnalizar() {
        setTitle("Analizar Profesores");
        setContentPane(mainPanel);
        setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
        addWindowListener(
            new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    new PZone();
                    dispose();
                }
            }
        );
        setResizable(false);
        init();
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    /**
     * llama a los metodos fillProfesores y setListeners
     */
    private void init() {
        fillProfesores();
        setListeners();
    }

    /**
     * Inicia los listeners de cada boton.
     */
    private void setListeners() {
        eliminarButton.addActionListener(a -> {
            errorNoSeleccionado.setVisible(false);
            setProfesor();
            if(profesor!=null){
                int selected = JOptionPane.showConfirmDialog(this,"¿Esta seguro?","Confirmar",JOptionPane.YES_NO_OPTION,JOptionPane.INFORMATION_MESSAGE);
                if(selected==0){
                    ExNihilo.eliminarProfesor(profesor);
                    fillProfesores();
                }
            }else{
                errorNoSeleccionado.setVisible(true);
            }
        });
        crearButton.addActionListener(a -> {
            errorNoSeleccionado.setVisible(false);
            new ProfesorCrear(this);
        });
        salirButton.addActionListener(a->{
            new PZone();
            dispose();
        });
        profesores.getSelectionModel().addListSelectionListener(a -> {
            setProfesor();
            fillAsignaturas();
        });
    }

    /**
     * Asigna el profesor seleccionado en la tabla de profesores.
     */
    private void setProfesor() {
        profesor = null;
        if (profesores.getSelectedRow() >= 0) {
            String selected = (String) profesores.getValueAt(profesores.getSelectedRow(), 1);
            profesor = Search.buscarProfesor(selected);
        }
    }

    /**
     * Llena la tabla de profesores con los almacenados en la base de datos.
     */
    public void fillProfesores() {
        String[][] profesores = Listas.listaProfesores();
        DefaultTableModel model = (DefaultTableModel) this.profesores.getModel();
        model.setRowCount(0);
        if (profesores != null) {
            for (String[] profesor : profesores) {
                model.addRow(profesor);
            }
        }
        setProfesor();
        fillAsignaturas();
    }

    /**
     * llena la tabla de asignaturas del profesor seleccionado.
     */
    private void fillAsignaturas() {
        DefaultTableModel model = (DefaultTableModel) this.asignaturas.getModel();
        model.setRowCount(0);
        if(profesor!=null) {
            String[][] asignaturas = Listas.listaAsignaturas(profesor);
            if (asignaturas != null) {
                for (String[] asignatura : asignaturas) {
                    model.addRow(asignatura);
                }
            }
        }
    }

    /**
     * Inicia las tablas asignandole sus valores iniciales-/
     */
    private void createUIComponents() {
        profesores = new JTable(new DefaultTableModel(new String[]{"Nombre", "Rut"}, 0) {
            @Override
            public boolean isCellEditable(int row, int column) {
                //all cells false
                return false;
            }
        });
        profesores.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

        asignaturas = new JTable(new DefaultTableModel(new String[]{"Nombre", "Curso"}, 0) {
            @Override
            public boolean isCellEditable(int row, int column) {
                //all cells false
                return false;
            }
        });
        asignaturas.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    }
}
