package com.ryuuji.visual.pZone.apoderado;

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

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

public class ApoderadoAnalizar extends JFrame {
    private JPanel mainPanel;
    private JTable apoderadoTable;
    private JButton crearButton;
    private JButton eliminarButton;
    private JButton salirButton;
    private JLabel errorSeleccionar;
    private JTable estudiantesTable;

    private Apoderado apoderado;

    /**
     * Inicia la ventana con sus valores iniciales ademas llama a init()
     */
    public ApoderadoAnalizar() {
        setTitle("Analizar Apoderado");
        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 fillApoderadoTable y setListeners
     */
    private void init() {
        fillApoderadosTable();
        setListeners();
    }

    /**
     * inicia los listeners de los botones y uno para la tabla cuando se selecciona un elemento de esta
     */
    private void setListeners() {
        eliminarButton.addActionListener(a -> {
            setApoderado();
            errorSeleccionar.setVisible(false);
            if (apoderado != null) {
                int selected = JOptionPane.showConfirmDialog(this, "¿Esta seguro?", "Confirmar", JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE);
                if (selected == 0) {
                    ExNihilo.eliminarApoderado(apoderado);
                    fillApoderadosTable();
                }
            } else {
                errorSeleccionar.setVisible(true);
            }
        });
        crearButton.addActionListener(a -> {
            errorSeleccionar.setVisible(false);
            new ApoderadoCrear(this);
        });
        salirButton.addActionListener(a -> {
            new PZone();
            dispose();
        });

        apoderadoTable.getSelectionModel().addListSelectionListener(a -> {
            setApoderado();
        });
    }

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

    /**
     * Llena la tabla con todos los apoderados del sistema
     */
    public void fillApoderadosTable() {
        DefaultTableModel model = (DefaultTableModel) apoderadoTable.getModel();
        model.setRowCount(0);
        String[][] apoderados = Listas.listaApoderados();
        if (apoderados != null) {
            for (String[] apoderado : apoderados) {
                model.addRow(apoderado);
            }
        }
    }

    /**
     * almacena el apoderado seleccionado
     */
    private void setApoderado() {
        apoderado = null;
        if (apoderadoTable.getSelectedRow() >= 0) {
            String selected = (String) apoderadoTable.getValueAt(apoderadoTable.getSelectedRow(), 1);
            if (selected != null) {
                apoderado = Search.buscarApoderado(selected);
            }
        }
        fillEstudiantesTable();
    }

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

        estudiantesTable = new JTable(new DefaultTableModel(new String[]{"Nombre Estudiante", "Rut", "Curso"}, 0) {

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