import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane; // Ajouté pour les messages d'erreur
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
 * Fenêtre principale de l'application de transmission de signaux.
 * @author REDJRADJ YACINE
 */
public class Fenetre extends JFrame {
    
    JLabel texte;
    JTextField chaineBinaire;
    JComboBox<String> comboBox;
    MyPanel panneauDessin; // Zone de dessin personnalisée

    public Fenetre() {
        super("Transmission - TonNom TonPrenom"); // J'ai ajouté ton nom dans le titre de la fenêtre
        init();
        pack();
        setLocationRelativeTo(null); // Centre la fenêtre à l'écran
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }
    
    private void init() {
        add(enTete(), BorderLayout.NORTH);
        add(panneau(), BorderLayout.CENTER);
    }
    
    private JPanel enTete() {
        JPanel head = new JPanel();
        
        texte = new JLabel("Chaine : ");
        head.add(texte);
        
        chaineBinaire = new JTextField(10);
        head.add(chaineBinaire);
        
        // Liste des choix de codage
        String[] methode = {"NRZ", "Manchester", "Manchester Différentiel", "Miller"};
        comboBox = new JComboBox<>(methode);
        head.add(comboBox);
        
        JButton bValider = new JButton("Valider");
        bValider.addActionListener(new ActionListener() { 
            @Override
            public void actionPerformed(ActionEvent arg0) {
                afficherResultat();
            }
        });
        head.add(bValider);
        
        return head;
    }
    
    public void afficherResultat() {
        String textChaineBinaire = chaineBinaire.getText();
        String methodeSelectionnee = (String) comboBox.getSelectedItem();
        
        try {
            // Tentative de mise à jour du signal
            panneauDessin.setSignal(textChaineBinaire, methodeSelectionnee);
        } catch (IllegalArgumentException e) {
            // Affichage d'une erreur si la saisie est mauvaise
            JOptionPane.showMessageDialog(this, 
                "Erreur : La chaîne ne doit contenir que des '0' et des '1'.", 
                "Erreur de saisie", 
                JOptionPane.ERROR_MESSAGE);
        }
    }
    
    private JPanel panneau() {
        panneauDessin = new MyPanel();
        return panneauDessin;
    }
}
