import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;

/**
 * A GUI for the language translation project.
 */
public class Translator extends JFrame implements ActionListener {
    JButton germanToEnglishButton;
    JButton englishToGermanButton;
    JButton frenchToEnglishButton;
    JButton englishToFrenchButton;
    JButton germanToFrenchButton;
    JButton frenchToGermanButton;
    JTextArea inputArea;
    JTextArea outputArea;

    /**
     * Creates, displays, and executes the GUI.
     * 
     * @param args Unused.
     */
    public static void main(String[] args) {
        Translator translator = new Translator();
        translator.createGui();
        translator.displayGui();
    }

    private void createGui() {
        JPanel textPanel = createTextPanel();
        JPanel buttonPanel = createButtonPanel();
        add(textPanel, BorderLayout.CENTER);
        add(buttonPanel, BorderLayout.SOUTH);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    
    private void displayGui() {
        pack();
        setVisible(true);
    }

    private JPanel createTextPanel() {
        JPanel textPanel = new JPanel();
        textPanel.setLayout(new GridLayout(2, 1));

        inputArea = createTextArea("Enter text here:");        
        outputArea = createTextArea("Translation:");
        
        outputArea.setEditable(false);
        
        textPanel.add(inputArea);
        textPanel.add(outputArea);
        return textPanel;
    }

    /**
     * 
     */
    private JTextArea createTextArea(String title) {
        JTextArea area = new JTextArea(3, 20);
        area.setBorder(BorderFactory.createTitledBorder(title));
        area.setLineWrap(true);
        area.setWrapStyleWord(true);
        area.setFont(new Font("Serif", Font.PLAIN, 18));
        return area;
    }

    private JPanel createButtonPanel() {
        JPanel buttonPanel = new JPanel();
        buttonPanel.setLayout(new GridLayout(2, 3));

        addButton(buttonPanel, germanToEnglishButton, "German to English");
        addButton(buttonPanel, frenchToEnglishButton, "French to English");
        addButton(buttonPanel, germanToFrenchButton,  "German to French");
        addButton(buttonPanel, englishToGermanButton, "English to German");
        addButton(buttonPanel, englishToFrenchButton, "English to French");
        addButton(buttonPanel, frenchToGermanButton,  "French to German");
        
        return buttonPanel;
    }
    
    private void addButton(JPanel panel, JButton button, String label) {
        button = new JButton(label);
        panel.add(button);
        button.addActionListener(this);
    }

    public void actionPerformed(ActionEvent event) {
        JButton button = (JButton) event.getSource();
        String[] words = button.getText().split(" ");
        LanguageTranslator translator =
            new LanguageTranslator(words[0], words[2]);
        outputArea.setText(translator.translate(inputArea.getText()));
    }
}
