package hu.swankey.ammo.common.script.yunits;

import hu.swankey.ammo.common.yggdrasil.definition.Definition;
import hu.swankey.ammo.common.yggdrasil.definition.PackageDefinition;

import java.util.Collection;
import java.util.Set;
import java.util.TreeMap;

public class YPackage extends YUnit implements Wrappable {
	
	private TreeMap<String, YUnit> elements = new TreeMap<String, YUnit>();
	private PackageDefinition definition;
	
	public YPackage(String name){
		super(name);
	};
	
	public void add(YUnit yunit){
		
		if (yunit == null)
			throw new NullPointerException("'yunit' cannot be null");
		
		elements.put(yunit.getName(), yunit);
		yunit.setParent(this);
		if (definition != null)
			definition.addYUnit(yunit);
	}
	
	
	public YUnit get(String name){
		return elements.get(name);
	}
	
	public Set<String> keySet(){
		return elements.keySet();
	}
	
	public Collection<YUnit> getAll(){
		return elements.values();
	}
	
	@Override
	public boolean hasWrapperElement() {
		return definition != null;
	}	
	
	@Override
	public PackageDefinition getWrapperElement(){
		if (definition == null) {
			definition = PackageDefinition.yclass().create(this);
			getParent().getWrapperElement().put(definition);
		}
		return definition;
	}
	



	
	public String toString(){
		return "Package '" + getName() + "'";
	}

//	@Override
	public void setWrapperElement(Definition wrapper) {
		throw new RuntimeException("Not Supported");
	}
}
