package gui.models;

import java.math.BigDecimal;

import javax.swing.table.AbstractTableModel;

import qora.voting.Poll;
import qora.voting.PollOption;

@SuppressWarnings("serial")
public class PollOptionsTableModel extends AbstractTableModel
{
	private static final int COLUMN_NAME = 0;
	public static final int COLUMN_VOTES = 1;
	public static final int COLUMN_PERCENTAGE = 2;
	
	private String[] columnNames = {"Name", "Votes", "% of Total"};
	private Poll poll;
	
	public PollOptionsTableModel(Poll poll)
	{
		this.poll = poll;
	}
	
	public PollOption getPollOption(int row)
	{
		return this.poll.getOptions().get(row);
	}
	
	@Override
	public int getColumnCount() 
	{
		return this.columnNames.length;
	}
	
	@Override
	public String getColumnName(int index) 
	{
		return this.columnNames[index];
	}

	@Override
	public int getRowCount() 
	{
		 return this.poll.getOptions().size();
	}

	@Override
	public Object getValueAt(int row, int column) 
	{
		if(this.poll.getOptions() == null || row > this.poll.getOptions().size() - 1 )
		{
			return null;
		}
		
		PollOption option = this.poll.getOptions().get(row);
		
		switch(column)
		{
		case COLUMN_NAME:
			
			String key = option.getName();
			
			//CHECK IF ENDING ON A SPACE
			if(key.endsWith(" "))
			{
				key = key.substring(0, key.length()-1);
				key += ".";
			}
			
			return key;
		
		case COLUMN_VOTES:
			
			return option.getVotes().toPlainString();
			
		case COLUMN_PERCENTAGE:
			
			BigDecimal total = this.poll.getTotalVotes();
			BigDecimal votes = option.getVotes();
			
			if(votes.compareTo(BigDecimal.ZERO) == 0)
			{
				return "0 %";
			}
			
			return votes.divide(total, BigDecimal.ROUND_UP).multiply(BigDecimal.valueOf(100)).toPlainString() + " %";
			
		}
		
		return null;
	}
}
