package poker;

public class Card {

	public Card(Suit suit, Rank rank) {
        this.suit = suit;
        this.rank = rank;

    }

	public Card(short _suit, short _cardnumber)
	{
		switch (_suit) {
		case 1 :
			this.suit = Suit.CLUBS;
			break;
		case 2 :
			this.suit = Suit.DIAMONDS;
			break;
		case 3 :
			this.suit = Suit.HEARTS;
			break;
		case 4 :
			this.suit = Suit.SPADES;
			break;
		default :
			break;
		}

		switch (_cardnumber) {
		case 1 :
			this.rank = Rank.ACE;
			break;
		case 2 :
			this.rank = Rank.TWO;
			break;
		case 3 :
			this.rank = Rank.THREE;
			break;
		case 4 :
			this.rank = Rank.FOUR;
			break;
		case 5 :
			this.rank = Rank.FIVE;
			break;
		case 6 :
			this.rank = Rank.SIX;
			break;
		case 7 :
			this.rank = Rank.SEVEN;
			break;
		case 8 :
			this.rank = Rank.EIGHT;
			break;
		case 9 :
			this.rank = Rank.NINE;
			break;
		case 10 :
			this.rank = Rank.TEN;
			break;
		case 11 :
			this.rank = Rank.JACK;
			break;
		case 12 :
			this.rank = Rank.QUEEN;
			break;
		case 13 :
			this.rank = Rank.KING;
			break;
		default : break;
		}
	}

	@Override
    public String toString() {
        return rank.toString() + " of " + suit.toString();
    }
	
	@Override
	public int hashCode() {
		
		int _hash = 7;  
		_hash = _hash * 31 + suit.hashCode();  
		_hash = _hash * 31 + rank.hashCode();  
		return _hash;   
	}

	@Override
	public boolean equals (Object other) {
		if ((other == null) || (!(other instanceof Card))) return false;

		if (this == other) return true;
		
		if (getClass() != other.getClass()) return false;
		
		Card card = (Card) other;
		return  card.suit == this.suit &&
				card.rank == this.rank;	
	}

protected enum Suit {
        CLUBS("Clubs"), DIAMONDS("Diamonds"), HEARTS("Hearts"), SPADES("Spades");

        private String name;
        Suit(String name) { this.name = name; }
        public String getName() { return name; }
    }

    protected enum Rank {
        ACE("Ace"), TWO("Two"), THREE("Three"), FOUR("Four"), FIVE("Five"),
        SIX("Six"), SEVEN("Seven"), EIGHT("Eight"), NINE("Nine"), TEN("Ten"),
        JACK("Jack"), QUEEN("Queen"), KING("King");

        private String name;
        Rank(String name) { this.name = name; }
        public String getName() { return name; }
    }

    protected Suit getSuit() {
        return this.suit;}

    protected Rank getRank() {
        return this.rank;
    }

    protected Suit suit;
    protected Rank rank;

}