package test;

import hcs.userInterface.VisualStartSystem;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

import junit.extensions.jfcunit.JFCTestCase;
import junit.extensions.jfcunit.JFCTestHelper;
import junit.extensions.jfcunit.TestHelper;
import junit.extensions.jfcunit.eventdata.AbstractEventData;
import junit.extensions.jfcunit.eventdata.JFCEventDataListener;
import junit.extensions.jfcunit.eventdata.JFCEventManager;
import junit.extensions.jfcunit.finder.AbstractButtonFinder;
import junit.extensions.jfcunit.finder.ComponentFinder;

public class TestLogging extends JFCTestCase {    
	
	private VisualStartSystem mainFrame = null;
	private JFrame manager = null;
	private JTextArea out = null;

    protected void setUp( ) throws Exception {
        super.setUp( );        // Choose the text Helper
        setHelper( new JFCTestHelper( ) ); // Uses the AWT Event Queue.
        // setHelper( new RobotTestHelper( ) ); // Uses the OS Event Queue.        
        
        mainFrame = new VisualStartSystem();
        mainFrame.setVisible( true );
        
        manager = new JFrame("Click on window to stop");
        final int W = 500;
        manager.setSize(W,300);
        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
        manager.setLocation(d.width-W-10,10);

        out = new JTextArea("");
        //out.setPreferredSize(new Dimension(500,200));
        JButton stop = new JButton("STOP!");
        manager.setLayout(new GridLayout(2,1));
        manager.add(stop);
        manager.add(new JScrollPane(out));
        manager.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        stop.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0) {
				synchronized(manager){
					manager.notify();
				}
			}
        });
        manager.setVisible(true);
		JFCEventManager.getEventManager().addJFCEventDataListener(
			    new JFCEventDataListener() {
			        public void handleEvent(AbstractEventData data) {			        	
			        	Component comp = data.getComponent();
			        	if(comp==null || data.getRoot()==manager){
				        	return;
			        	}
			        	String compCls = comp.getClass().getName();
			        	ComponentFinder finder = new ComponentFinder(comp.getClass());
			        	out.append("Event on: " + compCls);
			        	out.append(" '" + comp.getName()+"'\n");
			        	List comps = finder.findAll();
			        	out.append("# " + comps.indexOf(comp) +"  in " +
			        			"(new ComponentFinder(" + compCls + ")).findAll()\n");
			       }
			});
    }
    
    public void testLoadHouse() throws InterruptedException{
    	AbstractButtonFinder finder = new AbstractButtonFinder("Load");
    	JButton loadBt = (JButton)finder.find(mainFrame,0);
    	assertNotNull("Could not find Load button!",loadBt);
    	
    	finder.setText("Start");
    	JButton startBt = (JButton)finder.find(mainFrame,0);
    	assertNotNull("Could not find Load button!",startBt);
    	ComponentFinder finders = new ComponentFinder(JList.class);
    	JList sections = (JList)finders.find(mainFrame,0);

    	
    	loadBt.doClick();
    	
		JFCEventManager.setRecording(true);
		
		synchronized(manager){
			manager.wait();
		}
    }


    protected void tearDown( ) throws Exception {
    	mainFrame.setVisible(false);
    	mainFrame.dispose();
        mainFrame = null;
    	if(manager!=null){
    		manager.setVisible(false);
    		manager.dispose();
    		manager = null;
    	}
        TestHelper.cleanUp( this );
        super.tearDown( );
    }
}

