/*******************************************************************************
 * Copyright (C) 2017 Philipp Spohr
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 ******************************************************************************/
package de.hhu.ba.yoshikoWrapper.gui;

import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.Border;

import org.cytoscape.model.CyNode;
import org.cytoscape.util.swing.BasicCollapsiblePanel;

import de.hhu.ba.yoshikoWrapper.core.GraphicsLoader;
import de.hhu.ba.yoshikoWrapper.core.LocalizationManager;
import de.hhu.ba.yoshikoWrapper.graphModel.YoshikoCluster;

@SuppressWarnings("serial")
public class ClusterView extends JPanel {
	
	private final JLabel title;
	private final JLabel clusterSize;
	private final JLabel icon;
	private final BasicCollapsiblePanel nodeList;
	
	private final Border regularBorder = BorderFactory.createLineBorder(Color.GRAY,3);
	private final Border highlightBorder = BorderFactory.createLineBorder(GraphicsLoader.yoshikoGreen,3);
	
	//SYMBOLIC LINKS
	
	/**Simple array list containing references to the nodes that are represented by this cluster view
	 * 
	 */
	private YoshikoCluster cluster;
	
	public ClusterView(YoshikoCluster c) {
		
		this.cluster = c;		
		
		//Swing init
		this.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
		
		title = new JLabel(LocalizationManager.get("cluster")+" "+(c.getID()+1));
		clusterSize = new JLabel(LocalizationManager.get("clusterSize")+" "+c.getSize());
		icon = new JLabel();
		icon.setBorder(BorderFactory.createLineBorder(Color.BLACK));
		cluster.generateImage(icon,128, 128);

		SwingUtil.addAll(this,title,clusterSize,icon);
		this.add(Box.createVerticalStrut(4));
		
		nodeList = new BasicCollapsiblePanel(LocalizationManager.get("nodes"));
		
		//Loop over nodes in the cluster and add them to the view
		for (CyNode n : c.getSubNetwork().getNodeList()) {
			nodeList.add(
					new JLabel(
							c.getNodeName(n)
					)
				);
		}
		
		this.add(nodeList);
		
		this.addMouseListener(mouseListener);
		
		this.setBorder(regularBorder);

	}
	
	private MouseListener mouseListener = new MouseListener() {

		@Override
		public void mouseClicked(MouseEvent e) {}

		@Override
		public void mousePressed(MouseEvent e) {
			cluster.select();
		}
		
		@Override
		public void mouseReleased(MouseEvent e) {}

		@Override
		public void mouseEntered(MouseEvent e) {
			setBorder(highlightBorder);
		}

		@Override
		public void mouseExited(MouseEvent e) {
			setBorder(regularBorder);
		}


	};
}