package colaboradores;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/** Selector de colaboradores: simple o múltiple (método estático). */
public class ColaboradorSelectDialog extends JDialog {
private final JTextField tfBuscar = new JTextField(22);
private final DefaultTableModel model = new DefaultTableModel(
new Object[]{"Cédula", "Nombre", "Apellido", "Teléfono", "Cargo",
"Activo"}, 0) {
@Override public boolean isCellEditable(int r, int c) { return false; }
};
private final JTable tabla = new JTable(model);
private final ColaboradorDAO dao = new ColaboradorDAO();
private ColaboradorItem seleccionado = null;
public ColaboradorSelectDialog(Window owner) {
super(owner, "Buscar colaborador", ModalityType.APPLICATION_MODAL);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setSize(720, 420);
setLocationRelativeTo(owner);
setContentPane(buildUI());
cargar(""); // inicial
}
private JPanel buildUI() {
JPanel root = new JPanel(new BorderLayout(8, 8));
root.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
JPanel top = new JPanel(new FlowLayout(FlowLayout.LEFT, 8, 8));
top.add(new JLabel("Buscar (cedula/nombre/apellido):"));
top.add(tfBuscar);
JButton btn = new JButton("Buscar");
btn.addActionListener(e -> cargar(tfBuscar.getText().trim()));
top.add(btn);
root.add(top, BorderLayout.NORTH);
tabla.setRowHeight(22);
tabla.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tabla.addMouseListener(new MouseAdapter() {
@Override public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2 && tabla.getSelectedRow() >= 0)
aceptar();
}
});
root.add(new JScrollPane(tabla), BorderLayout.CENTER);
JPanel bottom = new JPanel(new FlowLayout(FlowLayout.RIGHT, 8, 8));
JButton btnCancelar = new JButton("Cancelar");
JButton btnAceptar = new JButton("Aceptar");
btnCancelar.addActionListener(e -> dispose());
btnAceptar.addActionListener(e -> aceptar());
bottom.add(btnCancelar);
bottom.add(btnAceptar);
root.add(bottom, BorderLayout.SOUTH);
return root;
}
private void cargar(String q) {
model.setRowCount(0);
List<ColaboradorItem> lista;
try {
// Si tienes buscarTodosPorTexto, úsalo; si no, listarTodos y filtras
lista = (q == null || q.isBlank()) ? dao.listarTodos() :
dao.buscarTodosPorTexto(q);
} catch (Exception ex) {
try { lista = dao.listarTodos(); } catch (SQLException e) { lista = new
ArrayList<>(); }
}
for (ColaboradorItem c : lista) {
if (q == null || q.isBlank()
|| c.getCedula().contains(q)
|| c.getNombre().toLowerCase().contains(q.toLowerCase())
|| c.getApellido().toLowerCase().contains(q.toLowerCase())) {
model.addRow(new Object[]{
c.getCedula(), c.getNombre(), c.getApellido(),
c.getTelefono(), c.getPerfil(), c.isActivo() ? "Sí" : "No"
});
}
}
if (model.getRowCount() > 0) {
tabla.setRowSelectionInterval(0, 0);
}
}
private void aceptar() {
int r = tabla.getSelectedRow();
if (r < 0) {
JOptionPane.showMessageDialog(this, "Selecciona un colaborador.");
return;
}
String ced = String.valueOf(model.getValueAt(r, 0));
String nom = String.valueOf(model.getValueAt(r, 1));
String ape = String.valueOf(model.getValueAt(r, 2));
seleccionado = new ColaboradorItem(ced, nom, ape,
String.valueOf(model.getValueAt(r,3)),
String.valueOf(model.getValueAt(r,4)),
true);
dispose();
}
// ==== API esperada por tu código ====
public String getCedulaSeleccionada() {
return (seleccionado != null) ? seleccionado.getCedula() : null;
}
public String getNombreSeleccionado() {
return (seleccionado != null) ? seleccionado.getNombreCompleto() : null;
}
public ColaboradorItem getSeleccionado() {
return seleccionado;
}
/** Selección múltiple usada por POSController. */
public static List<ColaboradorItem> seleccionarMultiples(Window owner) {
ColaboradorSelectDialog dlg = new ColaboradorSelectDialog(owner);
// permitir selección múltiple en esta instancia puntual
dlg.tabla.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
dlg.setVisible(true);
int[] rows = dlg.tabla.getSelectedRows();
List<ColaboradorItem> out = new ArrayList<>();
if (rows != null) {
for (int r : rows) {
String ced = String.valueOf(dlg.model.getValueAt(r, 0));
String nom = String.valueOf(dlg.model.getValueAt(r, 1));
String ape = String.valueOf(dlg.model.getValueAt(r, 2));
String tel = String.valueOf(dlg.model.getValueAt(r, 3));
String car = String.valueOf(dlg.model.getValueAt(r, 4));
out.add(new ColaboradorItem(ced, nom, ape, tel, car, true));
}
}
dlg.dispose();
return out;
}
}