package view;

import java.awt.Color;
import java.awt.Component;
import java.util.HashMap;
import java.util.Map;

import javax.swing.JTabbedPane;
import javax.swing.event.ChangeListener;

public class OngletDeGauche extends VueTabbed implements ChangeListener{
	private Map<String, Vue> tabs;
	private int modifiedTabCount;
	
	public OngletDeGauche() {
		super(JTabbedPane.LEFT);
		init();
	}

	public OngletDeGauche(int tabPlacement, int tabLayoutPolicy) {
		super(tabPlacement, tabLayoutPolicy);
		init();
	}

	public OngletDeGauche(int tabPlacement) {
		super(tabPlacement);
		init();
	}
	
	private void init (){
		tabs = new HashMap<>();
		modifiedTabCount = 0;
	}


	public void addJPanelObservable(String tabName, Vue _vue, Object _message){
		Component tmp = add(tabName.replace("%", ""), _vue);
		connecterUneAction(tabName.replace("%", ""), _message);
		tabs.put(tabName.replace("%", ""), _vue);
		setMnemonicAt(indexOfComponent(tmp), tabName.charAt(tabName.indexOf('%')+1));
	}

	public Vue setSelectedTab(String name){
		setSelectedComponent(tabs.get(name.replace("%", "")));
		setSelectedIndex(indexOfTab(name.replace("%", "")));
		
		return tabs.get(name.replace("%", ""));
	}
	
	public void setModifiedTab(String name, boolean modified){
		setForegroundAt(indexOfTab(name.replace("%", "")), (modified?Color.red:Color.DARK_GRAY));
		if(modified)
			modifiedTabCount++;
		else
			if(modifiedTabCount > 0)
				modifiedTabCount--;
	}
	
	public boolean getModifiedTab(){
		return (modifiedTabCount == 0?false:true);
	}

	@Override
	public void refreshSelectedTab(){
		String tabName = getTitleAt(getSelectedIndex());
		getObservable().setCompositingObject(getSelectedComponent());
		getObservable().notifyObservers(obtenirMessage(tabName));
	}
	
}
