package uno;
import java.util.*;
import uno.card.*;
public class Player{
	String n;
	TreeSet<Card> c;
	public Player(String n){
		this.n=n;
		c=new TreeSet<>();
	}
	public String getName(){
		return n;
	}
	public void draw(Card c){
		if(c==null)return;
		this.c.add(c);
	}
	public boolean hasWon(){
		return c.isEmpty();
	}
	public String terminalMessage(){
		return n+c;
	}
	public Card chooseCard(String s){
		//System.out.println("chooseCard "+s);
		// Ha a szöveg üres, akkor null-t ad vissza
		if(s.equals(""))return null;
		int n;
		//egy pozitív számnak kell benne lennie
		try{
			n = Integer.parseInt(s);
		}catch(NumberFormatException ex){
			return null;
		}
		//A kézben levő kártyákat 1-től számozva
		int i=1;
		Card ret=null;
		for(Card cc : c){
			//kiválasztja a megadott kártyát
			//System.out.println(i+" "+cc);
			if(i==n){ret=cc;}
			i++;
		}
		//System.out.println("Selected "+ret);
		//kiveszi a kézből
		//System.out.println("Removing now, size was: "+c.size());
		for(Card cc:c){
			//System.out.println("prelisting "+cc);
		}
		if(!c.remove(ret)){
			//System.out.println("FAILED to remove!!! "+ret);
			TreeSet<Card> c2=new TreeSet<>();
			for(Card cc:c){
				if(cc.equals(ret)){
					//System.out.println("Deleted "+cc);
				}else{
					//System.out.println("Kept "+cc);
					c2.add(cc);
				}
			}
			c=c2;
		}
		//System.out.println("Removed, size after: "+c.size());
		for(Card cc:c){
			//System.out.println("listing "+cc);
		}
		//és visszaadja.
		return ret;
	}
	//választ egy lapot. Ha a lap null, vagy nem helyezhető el a legfelső kijátszott lapra,
	public Card execute(String s, Card c){
		System.out.println("Execute called with "+s+" "+c);
		Card choice=chooseCard(s);
		if(choice==null || !choice.canPlaceOn(c)){//nem helyezhető el a legfelső kijátszott lapra
			System.out.println(choice+" nem helyezheto el a legfelso kijatszott lapra ("+c+")");
			return null;
		}
		return choice;
	}
}