package de.hhu.ba.yoshikoWrapper.gui;

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import org.cytoscape.application.swing.CytoPanelComponent;
import org.cytoscape.application.swing.CytoPanelName;

import de.hhu.ba.yoshikoWrapper.core.YoshikoInterface;

/**This class describes the Swing Panel that the user interacts with in cytoscape
 * @author Philipp Spohr, Aug 6, 2017
 *
 */
public class MainPanel extends JPanel implements CytoPanelComponent {

	/**
	 * Unique identifier for serialization
	 */
	private static final long serialVersionUID = 6214827920591046457L;
	
	//SYMBOLIC LINKS
	private YoshikoInterface yoshikoInterface = YoshikoInterface.getInstance();
	private MainPanel self = this; //for lambda function references
	//SWING COMPONENTS
	
	private LibStatusPanel libStatusPanel;
	private JButton searchLibButton;

	/**
	 * Main constructor, creates a new Panel and intializes subcomponents
	 */
	public MainPanel() {
		
		//SWING COMPONENT INITIALIZATION
		
		libStatusPanel = new LibStatusPanel();
		libStatusPanel.setStyle(yoshikoInterface.isLibraryLoaded());
		this.add(libStatusPanel);
		
		searchLibButton = new JButton("SHOW YOSHIKO LIB");
		searchLibButton.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				final YLibChooser c = new YLibChooser();
				int returnVal = c.showOpenDialog(self);
				if (returnVal == JFileChooser.APPROVE_OPTION) {
					yoshikoInterface.loadLibrary(c.getSelectedFile().getAbsolutePath());
				}
			}
			
		});
		this.add(searchLibButton);
		
		this.setVisible(true);
	}


	public Component getComponent() {
		return this;
	}


	/* (non-Javadoc)
	 * @see org.cytoscape.application.swing.CytoPanelComponent#getCytoPanelName()
	 */
	public CytoPanelName getCytoPanelName() {
		//By convention most plugins that provide a "toolbox"-like interface use the WEST orientation
		return CytoPanelName.WEST;
	}

	public String getTitle() {
		//TODO: Be creative I guess
		return "Yoshiko Wrapper Panel";
	}


	public Icon getIcon() {
		//TODO: 
		return null;
	}
}