package tutorialJava.examenes.examen20250616.vista;

import javax.swing.JPanel;
import java.awt.GridBagLayout;
import javax.swing.JLabel;
import java.awt.GridBagConstraints;
import java.awt.Font;
import javax.swing.JScrollPane;

import tutorialJava.examenes.examen20250616.controlador.ControladorEquipo;
import tutorialJava.examenes.examen20250616.modelo.Equipo;

import java.awt.Insets;
import javax.swing.JList;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.util.List;
import java.awt.event.ActionEvent;
import javax.swing.ListSelectionModel;

public class PanelListaEquipos extends JPanel {

	private static final long serialVersionUID = 1L;
	private DefaultListModel<Equipo> dlmEquipos = new DefaultListModel<Equipo>();
	private JList list;

	/**
	 * Create the panel.
	 */
	public PanelListaEquipos() {
		GridBagLayout gridBagLayout = new GridBagLayout();
		gridBagLayout.columnWidths = new int[]{0, 0, 0};
		gridBagLayout.rowHeights = new int[]{0, 0, 0};
		gridBagLayout.columnWeights = new double[]{1.0, 0.0, Double.MIN_VALUE};
		gridBagLayout.rowWeights = new double[]{0.0, 1.0, Double.MIN_VALUE};
		setLayout(gridBagLayout);
		
		JLabel lblNewLabel = new JLabel("Gestión de equipos de voleibol");
		lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 14));
		GridBagConstraints gbc_lblNewLabel = new GridBagConstraints();
		gbc_lblNewLabel.insets = new Insets(0, 0, 5, 5);
		gbc_lblNewLabel.gridx = 0;
		gbc_lblNewLabel.gridy = 0;
		add(lblNewLabel, gbc_lblNewLabel);
		
		JScrollPane scrollPane = new JScrollPane();
		GridBagConstraints gbc_scrollPane = new GridBagConstraints();
		gbc_scrollPane.insets = new Insets(0, 0, 0, 5);
		gbc_scrollPane.fill = GridBagConstraints.BOTH;
		gbc_scrollPane.gridx = 0;
		gbc_scrollPane.gridy = 1;
		add(scrollPane, gbc_scrollPane);
		
		list = new JList(dlmEquipos);
		list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		scrollPane.setViewportView(list);
		
		JPanel panel = new JPanel();
		GridBagConstraints gbc_panel = new GridBagConstraints();
		gbc_panel.fill = GridBagConstraints.BOTH;
		gbc_panel.gridx = 1;
		gbc_panel.gridy = 1;
		add(panel, gbc_panel);
		GridBagLayout gbl_panel = new GridBagLayout();
//		gbl_panel.columnWidths = new int[]{0, 0};
//		gbl_panel.rowHeights = new int[]{0, 0, 0, 0, 0};
//		gbl_panel.columnWeights = new double[]{0.0, Double.MIN_VALUE};
//		gbl_panel.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
		panel.setLayout(gbl_panel);
		
		JButton btnResetear = new JButton("Resetear");
		btnResetear.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				resetear();
			}
		});
		GridBagConstraints gbc_btnResetear = new GridBagConstraints();
		gbc_btnResetear.insets = new Insets(0, 0, 5, 0);
		gbc_btnResetear.gridx = 0;
		gbc_btnResetear.gridy = 0;
		panel.add(btnResetear, gbc_btnResetear);
		
		JButton btnArriba = new JButton("Arriba");
		btnArriba.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				equipoArriba();
			}
		});
		GridBagConstraints gbc_btnArriba = new GridBagConstraints();
		gbc_btnArriba.insets = new Insets(0, 0, 5, 0);
		gbc_btnArriba.gridx = 0;
		gbc_btnArriba.gridy = 1;
		panel.add(btnArriba, gbc_btnArriba);
		
		JButton btnAbajo = new JButton("Abajo");
		btnAbajo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				equipoAbajo();
			}
		});
		GridBagConstraints gbc_btnAbajo = new GridBagConstraints();
		gbc_btnAbajo.insets = new Insets(0, 0, 5, 0);
		gbc_btnAbajo.gridx = 0;
		gbc_btnAbajo.gridy = 2;
		panel.add(btnAbajo, gbc_btnAbajo);
		
		JButton btnEliminar = new JButton("Eliminar");
		btnEliminar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				eliminar();
			}
		});
		GridBagConstraints gbc_btnEliminar = new GridBagConstraints();
		gbc_btnEliminar.gridx = 0;
		gbc_btnEliminar.gridy = 3;
		panel.add(btnEliminar, gbc_btnEliminar);

	}
	
	/**
	 * 
	 */
	private void resetear() {
		List<Equipo> lista = ControladorEquipo.findAll();
		dlmEquipos.removeAllElements();
		for (Equipo e : lista) {
			dlmEquipos.addElement(e);
		}
	}

	/**
	 * 
	 */
	private void eliminar() {
		int selectedIndices[] = this.list.getSelectedIndices();
		for (int  i = selectedIndices.length - 1; i >= 0; i--) {
			dlmEquipos.removeElementAt(selectedIndices[i]);
		}
	}
	
	/**
	 * 
	 */
	private void equipoArriba() {
	    int selectedIndex = this.list.getSelectedIndex();
	    if (selectedIndex > 0) {
		    dlmEquipos.insertElementAt(
		    		dlmEquipos.elementAt(selectedIndex), selectedIndex - 1);
		    dlmEquipos.removeElementAt(this.list.getSelectedIndex());
		    list.setSelectedIndex(selectedIndex - 1);
	    }
	}
	
	/**
	 * 
	 */
	private void equipoAbajo() {
	    int selectedIndex = this.list.getSelectedIndex();
	    if (selectedIndex < dlmEquipos.getSize() - 1) {
		    dlmEquipos.insertElementAt(
		    		dlmEquipos.elementAt(selectedIndex), selectedIndex + 2);
		    dlmEquipos.removeElementAt(this.list.getSelectedIndex());
		    list.setSelectedIndex(selectedIndex + 1);
	    }
	}
}











