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 CardFun extends DisplayPanel {
    
    String urlString = "http://www.ccs.neu.edu/jpt/images/jfitz_cards/";
    
    ImagePaintableLite[] images =
        WebImageTools.readImagesAsPaintableLite(urlString,"");
    
    MutatableWrapper[] mutatables =
        new MutatableWrapper[images.length];
    
    int size = 150;
    
    Rectangle2D bounds = new Rectangle2D.Double(0, 0, size, size);
    
    {
        for (int i = 0; i < images.length; i++) {
            int w = images[i].getImageWidth();
            int h = images[i].getImageHeight();
            
            int dw = (size - w) / 2;
            int dh = (size - h) / 2;
            
            images[i].setTopLeftCorner(dw, dh);
            
            mutatables[i] = new MutatableWrapper(images[i]);
            
            mutatables[i].setDefaultBounds2D(bounds);
            
            // int degrees = 45 * MathUtilities.randomInt(-1, 1);
            
            // mutatables[i].addPostMutation(Mutator.rotate(degrees));
        }
    }
    
    public CardFun() {
        addObject(randomCardPanel(5));
        
        frame("Card Fun");
    }
    
    public int randomCardIndex() {
        return MathUtilities.randomInt(0, images.length);
    }
    
    public TablePanel randomCardPanel(int howmany) {
        TablePanel panel = new TablePanel(1, howmany);
        
        int[] indices = ProbStatTools.selectWithNoRepetition(52, howmany);
        
        int k = indices.length;
        
        for (int i = 0; i < k; i++)
            panel.addObject(mutatables[indices[i]]);
        
        return panel;
    }
}
