//Test Program for PlayingCard & Deck Objects.
//by Neil Broadbent

import java.io.*;
import NeilClass.*;

public class CardTest
{
    static Pack tPack = new PackImpl();
    
    public static void main(String[] pArgs) throws IOException
        {
            menu();
            
            
        }

    public static void menu() throws IOException
        {
            String temp = NeilClass.GetInputString("Press Enter");
            
            System.out.println("----PlayingCard Test---------------------------");
            System.out.println("0 - Create A Card & toString()");
            System.out.println("1 - Create 2 Cards & Compare");
            System.out.println("2 - Create 2 Cards & Compare Numbers");
            System.out.println("3 - Create 2 Cards & Compare Suit");
            System.out.println();
            System.out.println("----Pack Test---------------------------");
            System.out.println("4 - List Pack");
            System.out.println("5 - Add Card to top");
            System.out.println("6 - Remove Card from top");
            System.out.println("7 - Add Card to bottom");
            System.out.println("8 - Remove Card from bottom");
            System.out.println("9 - Remove Card from position X ");
            System.out.println("10 - Insert card into position X ");
            System.out.println("11 - Populate Pack ");
            System.out.println("12 - Shuffle Pack");
            System.out.println("13 - IsCardValid");
            
            int tOption = NeilClass.GetInputInt("Please choose an option ");
            
            switch (tOption)
            {
                case 0:
                {
                    String tInput = NeilClass.GetInputString("Type in a card ");
                    PlayingCard tCard1 = new PlayingCardImpl(tInput);
                    System.out.println("Card Created " + tCard1.toString());
                    menu();
                    break;
                }
                case 1:
                {
                    String tInput1 = NeilClass.GetInputString("Type in a card ");
                    String tInput2 = NeilClass.GetInputString("Type in another card ");
                    PlayingCard tCard1 = new PlayingCardImpl(tInput1);
                    PlayingCard tCard2 = new PlayingCardImpl(tInput2);
                    System.out.println("Cards are equal is " + tCard1.equals(tCard2));
                    menu();
                    break;
                }
                case 2:
                {
                    String tInput1 = NeilClass.GetInputString("Type in a card ");
                    String tInput2 = NeilClass.GetInputString("Type in another card ");
                    PlayingCard tCard1 = new PlayingCardImpl(tInput1);
                    PlayingCard tCard2 = new PlayingCardImpl(tInput2);
                    System.out.println("Card numbers equal is " + tCard1.SameNumber(tCard2));
                    menu();
                    break;
                }
                case 3:
                {
                    String tInput1 = NeilClass.GetInputString("Type in a card ");
                    String tInput2 = NeilClass.GetInputString("Type in another card ");
                    PlayingCard tCard1 = new PlayingCardImpl(tInput1);
                    PlayingCard tCard2 = new PlayingCardImpl(tInput2);
                    System.out.println("Card suits equal is " + tCard1.SameSuit(tCard2));
                    menu();
                    break;
                }
                case 4:
                {
                    tPack.ListPack();
                    menu();
                    break;
                }
                case 5:
                {
                    String tInput = NeilClass.GetInputString("Type in a card ");
                    PlayingCard tCard1 = new PlayingCardImpl(tInput);
                    tPack.addCardTop(tCard1);
                    tPack.ListPack();
                    
                    menu();
                    break;
                }
                case 6:
                {
                    System.out.println(tPack.removeCardTop());
                    tPack.ListPack();
                    
                    menu();
                    break;
                }
                case 7:
                {
                    String tInput = NeilClass.GetInputString("Type in a card ");
                    PlayingCard tCard1 = new PlayingCardImpl(tInput);
                    tPack.addCardBottom(tCard1);
                    tPack.ListPack();
                    
                    menu();
                    break;
                }
                case 8:
                {
                    System.out.println(tPack.removeCardBottom());
                    tPack.ListPack();
                    menu();
                    break;
                    
                }
                case 9:
                {
                    int tInput = NeilClass.GetInputInt("Type in the card number to remove 0-? ");
                    System.out.println(tPack.ExtractCard(tInput));
                    tPack.ListPack();
                    menu();
                    break;
                }
                case 10:
                {
                    String tInput = NeilClass.GetInputString("Type in a card ");
                    PlayingCard tCard1 = new PlayingCardImpl(tInput);
                    int tInputInt = NeilClass.GetInputInt("Type in the position to insert ");
                    tPack.InsertCard(tInputInt,tCard1);
                    tPack.ListPack();
                    menu();
                    break;
                }
                case 11:
                {
                    for (int i=1; i<11; i++){
                        PlayingCard tCard1 = new PlayingCardImpl(i + ":S");
                        tPack.addCardTop(tCard1);
                    }
                    
                    tPack.ListPack();
                    menu();
                    break;
                }
                case 12:
                {
                    tPack.Shuffle();
                    tPack.ListPack();
                    menu();
                    break;
                    
                }

                case 13:
                {
                    String tInput = NeilClass.GetInputString("Type in a card ");
                    PlayingCard tCard1 = new PlayingCardImpl(tInput);
                    System.out.println("valid? " + tCard1.isValidCard());

                    menu();
                    break;
                    
                }
                
                
                case 14:
                {
                    System.exit(1);
                    break;
                }
                default:
                {
                    menu();
                }
                
            }
        }
}
