/* @(#)CardSampler.java 1.0  7 February 2005 */

/* Useful imports */

import edu.neu.ccs.*;
import edu.neu.ccs.gui.*;
import edu.neu.ccs.codec.*;
import edu.neu.ccs.console.*;
import edu.neu.ccs.filter.*;
import edu.neu.ccs.jpf.*;
import edu.neu.ccs.parser.*;
import edu.neu.ccs.pedagogy.*;
import edu.neu.ccs.quick.*;
import edu.neu.ccs.util.*;

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.font.*;
import java.awt.image.*;
import javax.swing.*;
import javax.swing.border.*;
import java.io.*;
import java.util.*;
import java.math.*;
import java.beans.*;
import java.lang.reflect.*;
import java.net.*;
import java.util.regex.*;


public class CardSampler
    implements JPTConstants
{
    // GUI and actions
    BufferedPanel window = new BufferedPanel(400, 400);
    
    SimpleAction next = new SimpleAction("Next Card") {
        public void perform() { nextCard(); }
    };
    
    SimpleAction shuffle = new SimpleAction("Shuffle Deck") {
        public void perform() { shuffleDeck(); }
    };
    
    SimpleAction arrange = new SimpleAction("Arrange Deck In Order") {
        public void perform() { arrangeDeck(); }
    };
    
    Object[] actions = { next, shuffle, arrange };
    
    TablePanel actionsPanel = new TablePanel
        (actions, HORIZONTAL, 10, 10, CENTER);
    
    Object[] mainGUI = { window, actionsPanel };
    
    TablePanel mainPanel = new TablePanel
        (mainGUI, VERTICAL, 10, 10, CENTER);
    
    
    public CardSampler() {
        mainPanel.frame("Card Sampler");
        
    }
    
    
    // model data
    Card card = null;
    
    CardDeck deck = new CardDeck();
    
    CardTracker tracker = new CardTracker();
    
    int index = 0;
    
    
    
    private void nextCard() {
        if (index >= CardDeck.decksize)
            shuffleDeck();
        
        card = deck.getCard(index++);
        refresh();
    }
    
    
    private void shuffleDeck() {
        card = null;
        deck.shuffle();
        tracker.reset();
        index = 0;
        refresh();
    }
    
    
    private void arrangeDeck() {
        card = null;
        deck.placeInOrder();
        tracker.reset();
        index = 0;
        refresh();
    }
    
    
    private void refresh() {
        window.clearPanel();
        
        if (card != null) {
            String rank = card.getRankAsString();
            String suit = card.getSuitAsString();
            
            String s = rank + " of " + suit;
            
            TextPaintable tp = new TextPaintable
                (s, null, null, null, null, 10, 120);
            
            Graphics2D g = window.getBufferGraphics();
            
            card.getPicture().paint(g);
            
            tp.paint(g);
            
            g.translate(270, 0);
            
            tracker.markCard(card);
            tracker.paint(g);
        }
        
        window.repaint();
    }
}

