package org.greenstone.atlas.client;

import java.util.ArrayList;
import java.util.HashMap;

import com.google.gwt.user.client.ui.HTML;

public class StatusBar
{
	private HashMap<String, Integer> _ids = new HashMap<String, Integer>();
	private HTML _statusBarDiv = new HTML();
	private ArrayList<String> _statusUpdates = new ArrayList<String>();
	
	private GS3MapLibrary _atlasInstance = null;
	
	public StatusBar(GS3MapLibrary atlasInstance)
	{
		_statusBarDiv.setStyleName("statusBar");
		_atlasInstance = atlasInstance;
	}
	
	public void addUpdate(String update, String id)
	{
		GS3MapLibrary.logToConsole("Got update -> " + update + " - " + id);
		
		if(_ids.get(id) != null)
		{
			return;
		}

		for(int j = 0; j < _statusUpdates.size(); j++)
		{
			if(_statusUpdates.get(j) == null)
			{

				_statusUpdates.add(j, update);
				_ids.put(id, j);
				updateStatusBar();
				return;
			}
		}
		
		_ids.put(id, _statusUpdates.size());
		_statusUpdates.add(update);
		updateStatusBar();
		_atlasInstance.resizeElements();
	}
	
	public boolean removeUpdate(String updateId)
	{
		Integer index = _ids.get(updateId);
		if(index == null)
		{
			return false;
		}
		
		_ids.remove(updateId);
		_statusUpdates.set(index, null);
		updateStatusBar();
		_atlasInstance.resizeElements();
		return true;
	}
	
	private void updateStatusBar()
	{	
		String status = "";
		boolean noStatusUpdate = true;
		
		for(int j = 0; j < _statusUpdates.size(); j++)
		{
			if(_statusUpdates.get(j) != null)
			{
				if(noStatusUpdate)
				{
					noStatusUpdate = false;
				}
				else
				{
					status += " <br/> ";
				}
				
				status += _statusUpdates.get(j);
			}
		}
		
		if(!status.equals(""))
		{
			GS3MapLibrary.logToConsole("Adding progress image");
			status += "<br/><img src=\"http://localhost:8486/ATLAS/images/progress.gif\"></img>"; 
		}
		_statusBarDiv.setHTML(status);
	}
	
	public HTML getStatusBarDiv()
	{
		return _statusBarDiv;
	}
}
