import com.sun.glass.ui.Robot;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javafx.embed.swing.SwingNode;
import javafx.stage.Stage;
import javax.swing.JInternalFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.SwingUtilities;

/**
 *
 * @author Andrei Eremeev
 */
public class SwingNodeJMenuBar extends SwingNodeBaseTest {

    private boolean isMac;
    private JInternalFrame frame;
    private MenuListener listener;
    private boolean flag = true;
    
    @Override
    protected void init(SwingNode node) throws Exception {
        isMac = System.getProperty("os.name").toLowerCase().contains("os x");
        frame = new JInternalFrame();
        JMenuBar menuBar = new JMenuBar();
        JMenu menu = new JMenu("Main menu");
        listener = new MenuListener();
        menu.setMnemonic(KeyEvent.VK_M);
        menuBar.add(menu);
        JMenuItem item = new JMenuItem("A", KeyEvent.VK_A);
        item.addActionListener(listener);
        menu.add(item);
        item = new JMenuItem("B", KeyEvent.VK_B);
        item.addActionListener(listener);
        menu.add(item);
        item = new JMenuItem("C", KeyEvent.VK_C);
        item.addActionListener(listener);
        menu.add(item);
        frame.setJMenuBar(menuBar);
        frame.setVisible(true);
        node.setContent(frame);
    }
    
    private void typeHotKey(Robot robot, int key) {
        robot.keyPress(KeyEvent.VK_ALT);
        if (isMac) {
            robot.keyPress(KeyEvent.VK_SHIFT);
        }
        robot.keyPress(key);
        delay(50);
        robot.keyRelease(key);
        if (isMac) {
            robot.keyRelease(KeyEvent.VK_SHIFT);
        }
        robot.keyRelease(KeyEvent.VK_ALT);
    }
    
    @Override
    protected void doTest(Stage stage) throws Exception {
        SwingUtilities.invokeAndWait(new Runnable() {
            @Override
            public void run() {
                frame.requestFocus();
            }
        });
        Robot robot = createRobot();
        typeHotKey(robot, KeyEvent.VK_M);
        delay(50);
        typeHotKey(robot, KeyEvent.VK_A);
        delay(50);
        if (!listener.isTrigered) {
            flag = false;
            System.err.println("MenuItem did not get key event");
        } else {
            System.err.println("MenuItem got key event");
        }
        typeHotKey(robot, KeyEvent.VK_C);
        delay(50);
        if (!listener.isTrigered) {
            flag = false;
            System.err.println("MenuItem did not get key event");
        } else {
            System.err.println("MenuItem got key event");
        }
    }

    @Override
    protected boolean check() {
        return flag;
    }

    private static class MenuListener implements ActionListener {

        public volatile boolean isTrigered;
                
        public void reset() {
            isTrigered = false;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            isTrigered = true;
            System.err.println("MenuItem got key event : " + e);
        }
    }
}