/*

	Goal:
		Given a starting venue (hand) loop through
		every deck with generic function calls.

*/

/*
	let mut this_deck = crate::deck::make_array ();
	match crate::deck::remove_card (&mut this_deck, & ["7", "S"]) {
		Some (card) => println! ("Removed card: {:?}", card),
		None => println! ("Card not found"),
	}
	match crate::deck::remove_card (&mut this_deck, & ["7", "S"]) {
		Some (card) => println! ("Removed card: {:?}", card),
		None => println! ("Card not found"),
	}


	let on_card_1 = | card_1 : [&str; 2] | {

	};

	let on_flop = | card_1 : [&str; 2], card_2 : [&str; 2], card_3 : [&str; 2] | {

	};
	
	let on_turn = | card_1 : [&str; 2], card_2 : [&str; 2], card_3 : [&str; 2], turn : [&str; 2] | {

	};
	
	let on_river = | card_1 : [&str; 2], card_2 : [&str; 2], card_3 : [&str; 2], turn : [&str; 2], river : [&str; 2] | {

	};

	crate::deck::loop_through_stories::play (
		this_deck,
		
		on_card_1,
		on_flop,
		on_turn,
		on_river,
		
		skip_river : false
	);
*/

/*
	pub fn play (
		this_deck : Vec<[&'static str; 2]>,
		
		on_card_1 : fn ([&str; 2]),
		on_flop : fn ([&str; 2], [&str; 2], [&str; 2]),
		on_turn : fn ([&str; 2], [&str; 2], [&str; 2], [&str; 2]),
		on_river : fn ([&str; 2], [&str; 2], [&str; 2], [&str; 2], [&str; 2]),
		
		skip_river : bool
	) {
*/	


pub fn play<
    F1: FnMut ([&str; 2]),
    F2: FnMut ([&str; 2], [&str; 2], [&str; 2]),
    F3: FnMut ([&str; 2], [&str; 2], [&str; 2], [&str; 2]),
    F4: FnMut ([&str; 2], [&str; 2], [&str; 2], [&str; 2], [&str; 2]),
>(
    this_deck: Vec<[&'static str; 2]>,
    mut on_card_1: F1,
    mut on_flop: F2,
    mut on_turn: F3,
    mut on_river: F4,
    skip_river: bool,
) {
	for i1 in 0..=49 { 
		let flop_1 = this_deck [i1];
		
		on_card_1 (flop_1);
		
		for i2 in 0..=49 { 
			if (i2 == i1) { continue; }
			let flop_2 = this_deck [i2];
			
			for i3 in 0..=49 { 
				if (i3 == i1 || i3 == i2) { continue; }
				let flop_3 = this_deck [i3];
				
				on_flop (flop_1, flop_2, flop_3);
				
				for i4 in 0..=49 { 
					if (i4 == i1 || i4 == i2 || i4 == i3) { continue; }
					let turn = this_deck [i4];
					
					on_turn (flop_1, flop_2, flop_3, turn);
					
					if (skip_river) {
						continue;
					}
					
					for i5 in 0..=49 { 
						if (i5 == i1 || i5 == i2 || i5 == i3 || i5 == i4) { continue; }
						let river = this_deck [i5];
						
						on_river (flop_1, flop_2, flop_3, turn, river);
						
						/*
						for_each_river (
							venue_1_card,
							venue_2_card,
							flop_1,
							flop_2,
							flop_3,
							turn,
							river
						);
						*/
					}
				}
			}
		}
	}
	
	
	
}