#!/usr/bin/perl 

use v5.10;
use strict;
use warnings;
use FindBin;
use Term::ReadLine;
use English;
use lib "$FindBin::Bin/../lib";
use VANAMBURG::BCS;
use VANAMBURG::RandomNumbers;

my $term = Term::ReadLine->new("BCS Test");
my %menu =
  ( 1 => \&test_card_to_number, 2 => \&test_number_to_card, q => \&quit );

my $menu = <<END;

BCS Trainer Menu
======================
Enter 1 for Card to Number 
Enter 2 for Number to Card
Enter q to quit
END
say $menu;
my $test = $term->readline("Enter choice: ");
eval { $menu{$test}->() };
say "Sorry, but your choice was not valid.\n$EVAL_ERROR" if ($EVAL_ERROR);
quit();

sub quit {
	say "\nbye";
	exit;
}

sub test_number_to_card {
	my $instructions = <<END;
Enter the abbreviation for the card (AS,JD, 2H, etc)
when prompted with a stack number.  

10 random stack numbers will be used.
END
	say $instructions;

	my $bcs = VANAMBURG::BCS->new;
	for my $stacknum ( VANAMBURG::RandomNumbers->random_stacknumbers(10) )
	{
		my $card   = $bcs->card_at_location($stacknum);
		my $answer = uc $term->readline("Card at $stacknum: ");
		if ( $answer eq $card->abbreviation ) {
			say "Correct";
		}
		else {
			say "Wrong - correct answer is " . $card->abbreviation;
		}
	}
}

sub test_card_to_number {
	my $instructions = <<END;

When presented with a card, enter the stack number and press enter.

10 random cards will be presented.

END
	say $instructions;
	my $bcs = VANAMBURG::BCS->new;
	$bcs->shuffle_random;

	for ( 0 .. 9 ) {
		my $card   = $bcs->get_card($_);
		my $answer = $term->readline( $card->display_name . ": " );
		if ( $answer == $card->stack_number ) {
			say "Correct";
		}
		else {
			say "Wrong - stack number = " . $card->stack_number;
		}
	}
}
