package tutorialJava.examenes.examen20250509.vista;

import javax.swing.JPanel;
import java.awt.GridBagLayout;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

import java.awt.GridBagConstraints;
import java.awt.Font;
import java.awt.Insets;
import java.util.List;

import javax.swing.ButtonGroup;
import javax.swing.JComboBox;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTable;

import tutorialJava.examenes.examen20250616.controlador.ControladorEquipo;
import tutorialJava.examenes.examen20250616.controlador.ControladorSocio;
import tutorialJava.examenes.examen20250616.modelo.Equipo;
import tutorialJava.examenes.examen20250616.modelo.Socio;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.text.SimpleDateFormat;
import java.awt.event.ActionEvent;

public class PanelSociosPorEquipo extends JPanel {

	private static final long serialVersionUID = 1L;
	private JTable table;
	private JRadioButton radioOrdenarNombre;
	JRadioButton radioOrdenarApellido1;
	JRadioButton radioOrdenarApellido2;
	JRadioButton radioOrdenarFechaNacimiento;
	JComboBox jcbEquipo;
	JScrollPane scrollPane;
	SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
	

	/**
	 * Create the panel.
	 */
	public PanelSociosPorEquipo() {
		GridBagLayout gridBagLayout = new GridBagLayout();
		gridBagLayout.columnWidths = new int[]{0, 0, 0};
		gridBagLayout.rowHeights = new int[]{0, 0, 0, 0, 0};
		gridBagLayout.columnWeights = new double[]{0.0, 1.0, Double.MIN_VALUE};
		gridBagLayout.rowWeights = new double[]{0.0, 0.0, 0.0, 1.0, Double.MIN_VALUE};
		setLayout(gridBagLayout);
		
		JLabel lblNewLabel = new JLabel("Gestión de socios por equipo");
		lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 14));
		GridBagConstraints gbc_lblNewLabel = new GridBagConstraints();
		gbc_lblNewLabel.gridwidth = 2;
		gbc_lblNewLabel.insets = new Insets(0, 0, 5, 0);
		gbc_lblNewLabel.gridx = 0;
		gbc_lblNewLabel.gridy = 0;
		add(lblNewLabel, gbc_lblNewLabel);
		
		JLabel lblNewLabel_1 = new JLabel("Equipo:");
		GridBagConstraints gbc_lblNewLabel_1 = new GridBagConstraints();
		gbc_lblNewLabel_1.insets = new Insets(0, 10, 5, 5);
		gbc_lblNewLabel_1.anchor = GridBagConstraints.EAST;
		gbc_lblNewLabel_1.gridx = 0;
		gbc_lblNewLabel_1.gridy = 1;
		add(lblNewLabel_1, gbc_lblNewLabel_1);
		
		jcbEquipo = new JComboBox();
		jcbEquipo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				cargarSociosEnTabla();
			}
		});
		GridBagConstraints gbc_jcbEquipo = new GridBagConstraints();
		gbc_jcbEquipo.insets = new Insets(0, 0, 5, 0);
		gbc_jcbEquipo.fill = GridBagConstraints.HORIZONTAL;
		gbc_jcbEquipo.gridx = 1;
		gbc_jcbEquipo.gridy = 1;
		add(jcbEquipo, gbc_jcbEquipo);
		
		JPanel panel = new JPanel();
		GridBagConstraints gbc_panel = new GridBagConstraints();
		gbc_panel.insets = new Insets(0, 0, 5, 0);
		gbc_panel.gridwidth = 2;
		gbc_panel.fill = GridBagConstraints.BOTH;
		gbc_panel.gridx = 0;
		gbc_panel.gridy = 2;
		add(panel, gbc_panel);
		GridBagLayout gbl_panel = new GridBagLayout();
//		gbl_panel.columnWidths = new int[]{0, 0, 0};
//		gbl_panel.rowHeights = new int[]{0, 0, 0};
//		gbl_panel.columnWeights = new double[]{0.0, 0.0, Double.MIN_VALUE};
//		gbl_panel.rowWeights = new double[]{0.0, 0.0, Double.MIN_VALUE};
		panel.setLayout(gbl_panel);
		
		radioOrdenarNombre = new JRadioButton("Ordenar por Nombre");
		radioOrdenarNombre.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				cargarSociosEnTabla();
			}
		});
		radioOrdenarNombre.setSelected(true);
		GridBagConstraints gbc_radioOrdenarNombre = new GridBagConstraints();
		gbc_radioOrdenarNombre.insets = new Insets(0, 0, 5, 5);
		gbc_radioOrdenarNombre.gridx = 0;
		gbc_radioOrdenarNombre.gridy = 0;
		panel.add(radioOrdenarNombre, gbc_radioOrdenarNombre);
		
		radioOrdenarApellido1 = new JRadioButton("Ordenar por primer apellido");
		radioOrdenarApellido1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				cargarSociosEnTabla();
			}
		});
		GridBagConstraints gbc_radioOrdenarApellido1 = new GridBagConstraints();
		gbc_radioOrdenarApellido1.insets = new Insets(0, 0, 5, 0);
		gbc_radioOrdenarApellido1.gridx = 1;
		gbc_radioOrdenarApellido1.gridy = 0;
		panel.add(radioOrdenarApellido1, gbc_radioOrdenarApellido1);
		
		radioOrdenarApellido2 = new JRadioButton("Ordenar por segundo apellido");
		radioOrdenarApellido2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				cargarSociosEnTabla();
			}
		});
		GridBagConstraints gbc_radioOrdenarApellido2 = new GridBagConstraints();
		gbc_radioOrdenarApellido2.insets = new Insets(0, 0, 0, 5);
		gbc_radioOrdenarApellido2.gridx = 0;
		gbc_radioOrdenarApellido2.gridy = 1;
		panel.add(radioOrdenarApellido2, gbc_radioOrdenarApellido2);
		
		radioOrdenarFechaNacimiento = new JRadioButton("Ordenar por fecha de nacimiento");
		radioOrdenarFechaNacimiento.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				cargarSociosEnTabla();
			}
		});
		GridBagConstraints gbc_radioOrdenarFechaNacimiento = new GridBagConstraints();
		gbc_radioOrdenarFechaNacimiento.gridx = 1;
		gbc_radioOrdenarFechaNacimiento.gridy = 1;
		panel.add(radioOrdenarFechaNacimiento, gbc_radioOrdenarFechaNacimiento);
		
		scrollPane = new JScrollPane();
		GridBagConstraints gbc_scrollPane = new GridBagConstraints();
		gbc_scrollPane.gridwidth = 2;
		gbc_scrollPane.insets = new Insets(0, 0, 0, 5);
		gbc_scrollPane.fill = GridBagConstraints.BOTH;
		gbc_scrollPane.gridx = 0;
		gbc_scrollPane.gridy = 3;
		add(scrollPane, gbc_scrollPane);
		
		table = new JTable();
		scrollPane.setViewportView(table);
		
		ButtonGroup groupOrdenacion = new ButtonGroup();
		groupOrdenacion.add(radioOrdenarNombre);
		groupOrdenacion.add(radioOrdenarApellido1);
		groupOrdenacion.add(radioOrdenarApellido2);
		groupOrdenacion.add(radioOrdenarFechaNacimiento);
		
		cargarEquipos();
		cargarSociosEnTabla();
		
	}
	
	
	/**
	 * 
	 */
	private void cargarEquipos() {
		List<Equipo> lista = ControladorEquipo.findAll();
		for (Equipo e : lista) {
			jcbEquipo.addItem(e);
		}
	}

	/**
	 * 
	 */
	private void cargarSociosEnTabla() {
		// Localizo el id del equipo seleccionado en el JCombo
		Equipo equipoSeleccionado = (Equipo) jcbEquipo.getSelectedItem();
		
		// Localizo el campo de ordenación
		String campoOrdenacion = "";
		if (radioOrdenarNombre.isSelected()) {
			campoOrdenacion = "nombre";
		}
		else if (radioOrdenarApellido1.isSelected()) {
			campoOrdenacion = "apellido1";
		}
		else if (radioOrdenarApellido2.isSelected()) {
			campoOrdenacion = "apellido2";
		}
		else {
			campoOrdenacion = "fechaNacimiento";
		}
		
		// Obtengo los socios del equipo, ordenados correctamente
		List<Socio> listaSocios = ControladorSocio.findAllByEquipoAndOrder(
				equipoSeleccionado.getId(), 
				campoOrdenacion);
		
		// Convierto los datos de la lista en una matriz de datos
		Object matrizSocios[][] = new Object[listaSocios.size()][4];
		for (int i = 0; i < listaSocios.size(); i++) {
			matrizSocios[i][0] = listaSocios.get(i).getNombre();
			matrizSocios[i][1] = listaSocios.get(i).getApellido1();
			matrizSocios[i][2] = listaSocios.get(i).getApellido2();
			matrizSocios[i][3] = 
					sdf.format(listaSocios.get(i).getFechaNacimiento());
		}
		
		// Creo un array con los títulos de las columnas
		String titulos[] = new String[] {"Nombre", "Primer apellido",
				"Segundo apellido", "Fecha nacimiento"};
		
		// Creo un nuevo JTable con los datos
		table = new JTable(matrizSocios, titulos);
		table.addMouseListener(new MouseAdapter() {
			
			@Override
			public void mouseClicked(MouseEvent e) {
				JOptionPane.showMessageDialog(null, "Se ha hecho clic sobre "
						+ " el socio/a " + 
						listaSocios.get(table.getSelectedRow()).getNombre() +
						" con id " +
						listaSocios.get(table.getSelectedRow()).getId());
			}
		});
		
		// Muestro tabla en pantalla
		scrollPane.setViewportView(table);
	}
}









