package controller;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import model.Evento;
import model.ModeloSQL;
import view.Menu;
import view.MenuSala;

public class MenuController extends WindowAdapter implements ActionListener, ItemListener {
    private Menu menu;
    private MenuSala menuSala;
    private ModeloSQL modeloSQL;
    private String seleccionEventoComboBox;
    private ArrayList<Evento> arrayListEventos;
    
    public MenuController(Menu menu){
        this.menu = menu;
        this.modeloSQL = new ModeloSQL();
        arrayListEventos = new ArrayList<>();
        obtenerEventosDefaultComboBoxMoldel();
    }
    
    @Override
    public void actionPerformed(ActionEvent e){
        Object o = e.getSource();
        // Si se presiona el boton de visualizar
        if(o.equals(menu.jButtonVisualizar)){
            // Si se ha seleccionado un evento del comboBox
            if(seleccionEventoComboBox != null && seleccionEventoComboBox != "Seleccione un evento"){
                System.out.println("controller.MenuController.actionPerformed(): visualizar evento de " + seleccionEventoComboBox);
                menuSala = new MenuSala(obtenerIdEventoSeleccionado(seleccionEventoComboBox), seleccionEventoComboBox);
                menu.jPanelMenuSala.removeAll(); // Limpiar panel
                menu.jPanelMenuSala.add(menuSala, BorderLayout.CENTER); // Agrega el nuevo JPanel
                menu.jPanelMenuSala.revalidate();  // Reorganiza los componentes
                menu. jPanelMenuSala.repaint();     // Redibuja la interfaz
            } else {
                menu.mensaje("Debe seleccionar un evento.");
            }
        }
    }
    
    public void itemStateChanged(ItemEvent e) {
        // Obtener evento musical seleccionado del ComboBox
        if (e.getStateChange() == ItemEvent.SELECTED) {
            seleccionEventoComboBox = (String) menu.jComboBoxEventos.getSelectedItem();
            System.out.println("controller.MenuController.itemStateChanged: seleccionó " + seleccionEventoComboBox);
        }
    }
    
    @Override
    public void windowClosing(WindowEvent e) {
        System.out.println("controller.MenuController.windowClosing(): cerrar.");
        ConexionSingleton.closeConnection();
    }
    
    // Obtener ResultSet de ModeloSQL y añádir eventos al ComboBoxModel del ComboBox de eventos
    public void obtenerEventosDefaultComboBoxMoldel(){
        ResultSet rs = modeloSQL.obtenerEventos();
        menu.defaultComboBoxModel.addElement("Seleccione un evento");
        try {
            while ( rs.next() ){
                arrayListEventos.add(new Evento(rs.getInt("idEvento"), rs.getString("nombre"), rs.getDate("fecha")));
                menu.defaultComboBoxModel.addElement(rs.getString("nombre"));
                System.out.println("MenuController.obtenerEventosDefaultComboBoxMoldel(): + " + rs.getString("nombre"));
            }
        } catch (SQLException ex) {
            System.out.println("MenuController.obtenerEventosDefaultComboBoxMoldel(): error " + ex);
        }
    }
    
    public int obtenerIdEventoSeleccionado(String nombreEvento){
        int idEvento = 0;
        for(Evento evento: arrayListEventos){
            if(evento.getNombre().equals(nombreEvento)){
                idEvento = evento.getIdEvento();
                System.out.println("MenuController.obtenerIdEventoSeleccionado: " + nombreEvento + " id: " + idEvento );
            }
        }
        return idEvento;
    }
}