package examenes.examen20250509.vista;

import examenes.examen20250509.controlador.ControladorConcierto;
import examenes.examen20250509.controlador.ControladorGrupo;
import examenes.examen20250509.controlador.ControladorSala;
import examenes.examen20250509.modelo.Grupo;

import javax.swing.JPanel;
import java.awt.BorderLayout;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JLabel;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.table.DefaultTableModel;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.List;

public class EstadisticasConciertos extends JPanel {

    private static final long serialVersionUID = 1L;
    private JTable tablaDatos;
    private JTextField textFieldPrecioMedio;
    private JTextField textFieldMasConciertos;
    private DefaultTableModel dtm = new DefaultTableModel(obtenerDatos(), new String[]{"Ciudad", "Nº Festivales"});

    /**
     * Create the panel.
     */
    public EstadisticasConciertos() {
        setLayout(new BorderLayout(0, 0));

        JScrollPane scrollPane = new JScrollPane();
        add(scrollPane, BorderLayout.CENTER);

        tablaDatos = new JTable(dtm);
        scrollPane.setViewportView(tablaDatos);

        JPanel panel = new JPanel();
        add(panel, BorderLayout.SOUTH);
        GridBagLayout gbl_panel = new GridBagLayout();
        gbl_panel.columnWidths = new int[]{194, 61, 0};
        gbl_panel.rowHeights = new int[]{16, 0, 0};
        gbl_panel.columnWeights = new double[]{0.0, 1.0, Double.MIN_VALUE};
        gbl_panel.rowWeights = new double[]{0.0, 0.0, Double.MIN_VALUE};
        panel.setLayout(gbl_panel);

        JButton btnNewButton = new JButton("Calcular Precio Medio");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                textFieldPrecioMedio.setText(ControladorConcierto.calcularPrecioMedio() + " €");
            }
        });
        GridBagConstraints gbc_btnNewButton = new GridBagConstraints();
        gbc_btnNewButton.anchor = GridBagConstraints.EAST;
        gbc_btnNewButton.insets = new Insets(0, 0, 5, 5);
        gbc_btnNewButton.gridx = 0;
        gbc_btnNewButton.gridy = 0;
        panel.add(btnNewButton, gbc_btnNewButton);

        textFieldPrecioMedio = new JTextField();
        textFieldPrecioMedio.setEditable(false);
        GridBagConstraints gbc_textFieldPrecioMedio = new GridBagConstraints();
        gbc_textFieldPrecioMedio.insets = new Insets(0, 0, 5, 0);
        gbc_textFieldPrecioMedio.fill = GridBagConstraints.HORIZONTAL;
        gbc_textFieldPrecioMedio.gridx = 1;
        gbc_textFieldPrecioMedio.gridy = 0;
        panel.add(textFieldPrecioMedio, gbc_textFieldPrecioMedio);
        textFieldPrecioMedio.setColumns(10);

        JButton btnNewButton_1 = new JButton("Calcular Grupo con más Conciertos");
        btnNewButton_1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Object[] datos = ControladorGrupo.obtenerGrupoConMasConciertos();
                textFieldMasConciertos.setText(((Grupo) datos[0]).getNombre() + " - " + datos[1]);
            }
        });
        GridBagConstraints gbc_btnNewButton_1 = new GridBagConstraints();
        gbc_btnNewButton_1.anchor = GridBagConstraints.EAST;
        gbc_btnNewButton_1.insets = new Insets(0, 0, 0, 5);
        gbc_btnNewButton_1.gridx = 0;
        gbc_btnNewButton_1.gridy = 1;
        panel.add(btnNewButton_1, gbc_btnNewButton_1);

        textFieldMasConciertos = new JTextField();
        textFieldMasConciertos.setEditable(false);
        GridBagConstraints gbc_textFieldMasConciertos = new GridBagConstraints();
        gbc_textFieldMasConciertos.fill = GridBagConstraints.HORIZONTAL;
        gbc_textFieldMasConciertos.gridx = 1;
        gbc_textFieldMasConciertos.gridy = 1;
        panel.add(textFieldMasConciertos, gbc_textFieldMasConciertos);
        textFieldMasConciertos.setColumns(10);

    }

    private Object[][] obtenerDatos() {
        List<String> ciudades = ControladorSala.obtenerCiudades();
        Object[][] datos = new Object[ciudades.size()][2];
        for (int i = 0; i < ciudades.size(); i++) {
            datos[i][0] = ciudades.get(i);
            datos[i][1] = ControladorConcierto.obtenerRecuentoFestivalesPorCiudad(ciudades.get(i));
        }

        return datos;
    }

}
