package com.ryuuji.visual.pZone.estudiante;

import logica.ExNihilo;
import logica.Listas;
import logica.Search;
import orm.Anotacion;
import orm.Estudiante;
import orm.Profesor;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;

public class VerAnotaciones extends JFrame {

    private final Estudiante estudiante;
    private JPanel mainPanel;
    private JTable table;
    private JButton salirButton;
    private JButton añadirButton;
    private JButton modificarButton;
    private JButton eliminarButton;
    private JLabel errorSeleccionar;

    private Anotacion selectedAnotacion;

    /**
     * inicia la ventana asignandole valores basicos
     * @param estudiante Estudiante del que son las anotaciones
     */
    public VerAnotaciones(Estudiante estudiante) {
        this.estudiante = estudiante;
        setTitle("Ver Anotaciones");
        setContentPane(mainPanel);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        setResizable(false);
        pack();
        setLocationRelativeTo(null);
        init();
        setVisible(true);
    }

    /**
     * llama a setListeners y a fillTable
     */
    private void init(){
        setListeners();
        fillTable();
    }

    /**
     * Añade los listeners a los botones de la ventana
     */
    private void setListeners(){
        salirButton.addActionListener(a->{
            dispose();
        });
        añadirButton.addActionListener(a->{
            errorSeleccionar.setVisible(false);
            new AñadirAnotacion(this,estudiante);
            pack();
        });
        modificarButton.addActionListener(a->{
            errorSeleccionar.setVisible(false);
            setAnotacion();
            if (selectedAnotacion!=null) {
                new AnotacionEditar(this,selectedAnotacion);
            }else{
                errorSeleccionar.setVisible(true);
            }
            pack();
        });
        eliminarButton.addActionListener(a->{
            eliminarAnotacion();
            pack();
            fillTable();
        });
    }

    /**
     * Elimina la anotacion seleccionada en la tabla
     */
    private void eliminarAnotacion(){
        setAnotacion();
        System.out.println(selectedAnotacion);
        if(selectedAnotacion!=null) {
            int confirm = JOptionPane.showConfirmDialog(this, "¿Esta seguro?", "Eliminar Anotacion", JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE);
            if (confirm == 0) {
                ExNihilo.eliminarAnotacion(selectedAnotacion);
                fillTable();
            }
        }else{
            errorSeleccionar.setVisible(true);
        }
    }

    /**
     * Almacena la anotacion seleccionada en la tabla
     */
    private void setAnotacion(){
        errorSeleccionar.setVisible(false);
        selectedAnotacion=null;
        if(table.getSelectedRow()>=0) {
            Profesor profesor = Search.buscarProfesor((String) table.getValueAt(table.getSelectedRow(),0));
            String descripcion = (String) table.getValueAt(table.getSelectedRow(),1);
            boolean positiva = table.getValueAt(table.getSelectedRow(), 2).equals("Positiva");
            selectedAnotacion = Search.buscarAnotacion(estudiante,profesor,descripcion,positiva);
        }else{
            errorSeleccionar.setVisible(true);
        }
    }

    /**
     * llena la tabla con las anotaciones del estudiante
     */
    void fillTable(){
        String[][] lista = Listas.listaAnotaciones(estudiante);
        DefaultTableModel model = ((DefaultTableModel) table.getModel());
        model.setRowCount(0);
        if(lista!=null) {
            for (String[] anotacion : lista) {
                model.addRow(anotacion);
            }
        }
    }

    /**
     * Inicia la tabla con sus valores basicos
     */
    private void createUIComponents() {
        table = new JTable(new DefaultTableModel(new String[]{"Profesor", "Descripcion", "Tipo"}, 0));
    }
}
