package view;

import java.util.HashMap;

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

import tool.observable.EasyObservable;

public abstract class VueTabbed extends JTabbedPane implements ChangeListener{
	/**
	 * 
	 */
	private static final long serialVersionUID = -7079213720381976935L;

	private EasyObservable obs;
	
	private HashMap<Object, Object> messagePourControleur;
	
	protected VueTabbed(int tabPlacement, int tabLayoutPolicy) {
		super(tabPlacement, tabLayoutPolicy);
		obs = new EasyObservable(this);
		messagePourControleur = new HashMap<>();
		addChangeListener(this);
	}

	protected VueTabbed(int tabPlacement) {
		super(tabPlacement);
		obs = new EasyObservable(this);
		messagePourControleur = new HashMap<>();
		addChangeListener(this);
	}

	protected VueTabbed(){
		super();
		obs = new EasyObservable(this);
		messagePourControleur = new HashMap<>();
		addChangeListener(this);
	}
	
    public EasyObservable getObservable(){
        return obs;
    }
    
    public void connecterUneAction(Object acteur, Object message){
    	messagePourControleur.put(acteur, message);
    }
    
    public Object obtenirMessage(Object object){
    	if (!messagePourControleur.containsKey(object))
    		return null;
    	return messagePourControleur.get(object);
    }
    
	public void refreshSelectedTab(){
		System.out.println("refresh called before overide (-_-)");
	}

	@Override
	public void stateChanged(ChangeEvent e) {
		//ystem.out.println("(*_*)");
		JTabbedPane caller = ((JTabbedPane)e.getSource());
		if (caller.getSelectedIndex()==-1)
			return;
		String tabName = caller.getTitleAt(caller.getSelectedIndex());
		
		getObservable().setCompositingObject(getSelectedComponent());
		getObservable().notifyObservers(obtenirMessage(tabName));
		refreshSelectedTab();
	}
}
