package edu.calpoly.csc480.Corral.Seer;

import java.awt.*;
import java.util.*;
import javax.swing.*;

import edu.calpoly.csc480.Corral.Agent.*;

abstract public class BaseStatusView extends JPanel
{
	static final int infiniteRows = 0;
	static final int numColumns = 2;
	static final int valueColumn = 1;
	
	public BaseStatusView() {
		super(new GridBagLayout(), true);
		
		keyCurb = new GridBagConstraints();
		valueCurb = new GridBagConstraints();
		
		values = new ArrayList();
	}

	public void setOwner(BaseSeerView view) {
		this.view = view;
		this.font = view.getFont();
	}
	
	public void setDocument(BaseSeer seer) {
		this.seer = seer;
		reset();
	}
	
	public void agentSelected(BaseMeans baseMeans) {
		reset();
	}
	
	public void agentUnselected() {
		reset();
	}
	
	public void next() {
		setTidbit(lifespan, seer.getCycle());
	}

	protected BaseSeer seer;
	protected BaseSeerView view;

	protected Font font;
	protected GridBagConstraints keyCurb, valueCurb;

	protected java.util.List keys, values;
	
	protected int lifespan;
	
	protected void reset() {
		final Insets keyInsets   = new Insets(2, 2, 2, 4);
		final Insets valueInsets = new Insets(2, 4, 2, 2);
		
		keyCurb.anchor = GridBagConstraints.NORTHWEST;
		keyCurb.gridx = 0;
		keyCurb.gridy = GridBagConstraints.RELATIVE;
		keyCurb.gridwidth = 1;
		keyCurb.gridheight = 1;
		keyCurb.insets = keyInsets;
		keyCurb.weightx = 0.5;
		keyCurb.weighty = 0.0;

		valueCurb.anchor = GridBagConstraints.NORTHEAST;
		valueCurb.gridx = 1;
		valueCurb.gridy = GridBagConstraints.RELATIVE;
		valueCurb.gridwidth = 1;
		valueCurb.gridheight = 1;
		valueCurb.insets = valueInsets;
		valueCurb.weightx = 0.5;
		valueCurb.weighty = 0.0;

		removeAll();
		lifespan = addTidbit("Lifespan:", 0);
	}

	protected int addTidbit(String key, String value) {
		JLabel valueLabel;
		
		add(new JLabel(key, JLabel.RIGHT), keyCurb);
		add(valueLabel = new JLabel(value, JLabel.LEFT), valueCurb);
		
		values.add(valueLabel);
		return values.size() - 1;
	}

	protected int addTidbit(String key, long value) {
		return addTidbit(key, "" + value);
	}
	
	protected void setTidbit(int row, String value) {
		((JLabel)values.get(row)).setText(value);
	}

	protected void setTidbit(int row, long value) {
		setTidbit(row, "" + value);
	}
}