package com.ryuuji.visual.cZone.curso;

import com.ryuuji.visual.cZone.CZone;
import logica.ExNihilo;
import logica.Listas;
import logica.Search;
import orm.Curso;

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

public class AnalizarCursos extends JFrame {
    private JPanel mainPanel;
    private JButton salirButton;
    private JComboBox<Object> cursoBox;
    private JButton crearButton;
    private JTable tableAsignaturas;
    private JButton eliminarButton;
    private JTable tableEstudiantes;
    private JLabel error;

    private Curso curso;

    /**
     * Constructor que inicia las variables basicas de la ventana, ademas llama a los metodos init y setListeners
     *
     */
    public AnalizarCursos() {
        setTitle("Analizar Cursos");
        setContentPane(mainPanel);
        setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
        addWindowListener(
            new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    new CZone();
                    dispose();
                }
            }
        );
        setResizable(false);
        init();
        pack();
        setLocationRelativeTo(null);
        setVisible(true);

    }

    /**
     * Llama a los metodos
     * fillCursos()
     * setCursos()
     * fillAsignaturas()
     * fillEstudiantes()
     * setListeners()
     * En ese orden
     */
    public void init() {
        fillCursos();
        setCurso();
        fillAsignaturas();
        fillEstudiantes();
        setListeners();
    }

    /**
     * Añade listeners a la jcombobox del curso y a los botones de la ventana
     */
    public void setListeners() {
        cursoBox.addActionListener(a -> {
            setCurso();
            fillEstudiantes();
            fillAsignaturas();
        });
        salirButton.addActionListener(a -> {
            new CZone();
            dispose();
        });
        eliminarButton.addActionListener(a -> {
            error.setVisible(false);
            if (curso != null) {
                int selected = JOptionPane.showConfirmDialog(this,"¿Esta seguro?","Confirmar",JOptionPane.YES_NO_OPTION,JOptionPane.ERROR_MESSAGE);
                if (selected==0){
                    ExNihilo.eliminarCurso(curso);
                    fillCursos();
                }
            }else{
                error.setVisible(true);
            }
        });
        crearButton.addActionListener(a -> {
            error.setVisible(false);
            new CursoCrear(this);
        });
    }

    /**
     * Llena la combobox de cursos con los datos de cursos que hay en la base de datos
     */
    public void fillCursos() {
        String[] cursos = Listas.listaCursos();
        cursoBox.removeAllItems();
        if (cursos != null) {
            for (String curso : cursos) {
                cursoBox.addItem(curso);
            }
        }
        setCurso();
        fillAsignaturas();
        fillEstudiantes();
    }

    /**
     * Setea el curso que esta seleccionado en la combobox
     */
    public void setCurso() {
        String selected = (String) cursoBox.getSelectedItem();
        curso = null;
        if (selected != null) {
            int nivel = Integer.valueOf(selected.split("-")[0]);
            String letra = selected.split("-")[1];
            curso = Search.buscarCurso(nivel, letra);
        }
    }

    /**
     * Llena la tabla con las asignaturas del curso seleccionado
     */
    public void fillAsignaturas() {
        String[][] asignaturas = Listas.listaAsignaturasProfesor(curso);
        DefaultTableModel model = (DefaultTableModel) tableAsignaturas.getModel();
        model.setRowCount(0);
        if (asignaturas != null) {
            for (String[] asignatura : asignaturas) {
                model.addRow(asignatura);
            }
        }
    }

    /**
     * Llena la tabla de estudiantes con los estudiantes del curso seleccionado
     */
    public void fillEstudiantes() {
        String[][] estudiantes = Listas.listaEstudiantes(curso);
        DefaultTableModel model = (DefaultTableModel) tableEstudiantes.getModel();
        model.setRowCount(0);
        if (estudiantes != null) {
            for (String[] estudiante : estudiantes) {
                model.addRow(estudiante);
            }
        }
    }

    /**
     * Inicia las tablas de la ventana con sus valores correspondientes
     */
    private void createUIComponents() {
        tableAsignaturas = new JTable(new DefaultTableModel(new String[]{"Asignatura", "Profesor"}, 0) {

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

            @Override
            public boolean isCellEditable(int row, int column) {
                //all cells false
                return false;
            }
        });
        tableEstudiantes.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    }
}
