package somiba.domain;

import java.util.Iterator;
import java.util.List;
import java.util.Vector;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;

@Entity
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Table(name="player")
public class Player {

	@OneToMany(cascade=CascadeType.ALL)
    @JoinColumn(name="name", referencedColumnName = "name")
    
	private String name;
	@Transient
	private double compareValue;
	@Transient
	private String printable;
	private int seasons = 0;

    public Player() {}

	public void setSeasons(int seasons) {
		this.seasons = seasons;
	}

	@Column(nullable = false)  
	public int getSeasons() {
		return seasons;
	}

    @Id
	@Column(length = 9, unique = true, nullable = false)  
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public void setCompareValue(double compareValue) {
		this.compareValue = compareValue;
	}
	public void incrementSeasons() {
		seasons++;
	}

	public Player(String name, int seasons) {
		this.name = name;
		this.seasons = seasons;
	}

	public String printData(Season totals, List<Season> seasonList) {
		StringBuilder contents = new StringBuilder();
		Iterator<Season> seasonsItr = seasonList.iterator();
		Season season = null;
		Vector<String> averages = new Vector<String>();
		Vector<String> raw = new Vector<String>();
		int count = 0;
		while (seasonsItr.hasNext()) {
			season = seasonsItr.next();
			if (season.getName().equals("composite"))
				continue;
			if (season.getTeam().equals("Totals"))
				continue;
			season.fill(averages, raw);
			count++;
		}
		totals.fill(averages, raw);
		contents.append("CAREER AVERAGES                                                                                 REBOUNDS\n");
		contents.append("YR TM         GP  GS   MIN   FGM   FGA  FG%  3PM  3PA  3P%  FTM  FTA  FT%  STL  BLK   TO   PF  OFF   TOT   AST   PTS\n");
		for (int i = 0; i < count; i++)
			contents.append(averages.get(i) + "\n");
		contents.append("<b>");
		contents.append(averages.get(count) + "\n");
		contents.append("</b>\n");
		contents.append("CAREER TOTALS                                                                                   REBOUNDS\n");
		contents.append("YR TM         GP  GS   MIN   FGM   FGA  FG%  3PM  3PA  3P%  FTM  FTA  FT%  STL  BLK   TO   PF  OFF   TOT   AST   PTS\n");
		for (int i = 0; i < count; i++)
			contents.append(raw.get(i) + "\n");
		contents.append("<b>");
		contents.append(raw.get(count) + "\n");
		contents.append("</b>\n");
		return contents.toString();
	}

	public void format(int decimals) {
		StringBuffer buf = new StringBuffer();
		int val = (int) (compareValue * Math.pow(10., decimals));
		buf.append(String.valueOf(val));
		while (buf.length() < decimals)
			buf.append("0");
		if (decimals > 0)
			buf.insert(buf.length() - decimals, ".");
		printable = buf.toString();
	}

	@Override
	public String toString() {
		return printable;
	}

}
