//Pack Class
//by Neil Broadbent

import java.util.*;
import java.io.*;

public class PackImpl implements Pack
{
    List tPack = new LinkedList();
    
    public PackImpl()
        {
        }

    public void addCard(PlayingCard tCard)
        {
            tPack.add(tCard);
        }
    
    public void addCardTop(PlayingCard tCard)
        {
            tPack.add(tCard);
        }
    
    public void addCardBottom(PlayingCard tCard)
        {
            tPack.add(0,tCard);
        }
    
    public void InsertCard(int tCardPosition,PlayingCard tCard)
        {
            tPack.add(tCardPosition,tCard);
        }

    
    public PlayingCard removeCard()
        {
            return removeCardTop();
        }
    
    public PlayingCard removeCardTop()
        {
            int PackSize = tPack.size();
            return (PlayingCard)tPack.remove(PackSize-1);
        }
    
    public PlayingCard removeCardBottom()
        {
            return (PlayingCard)tPack.remove(0);
        }
    
    public PlayingCard ExtractCard(int tCardPosition)
        {
            return (PlayingCard)tPack.remove(tCardPosition);
        }

    public void ListPack()
        {
                System.out.println("(Bottom) " + tPack + " (Top)");
        }
    
    public void Shuffle()
        {
            int PackSize = tPack.size()-1;
            int Loops = PackSize*5;
            int R1=0;
            int R2=0;
            
            Object tCard1 = new PlayingCardImpl();
            Object tCard2 = new PlayingCardImpl();
            
                //Pick to random cards and swap them
            for (int i=0; i<Loops; i++){
                R1 = (int)(Math.random()*PackSize);
                R2 = (int)(Math.random()*PackSize);

                    //Removes Cards
                tCard1 = tPack.remove(R1);
                tCard2 = tPack.remove(R2);

                    //Swaps them
                tPack.add(R2,tCard1);
                tPack.add(R1,tCard2);
            }
        }
}
