/*
	Asks:
		[   ]  
				Flop: 2+2 Stories, Equal Jersey
					Probability of: Straight or Flush
					
					
		[   ] 
			Roll: [ "AS", "AH" ] 
			Question, Achieves: [ "Straight", "Flush" ]
*/


#![allow(dead_code)]
#![allow(unused_mut)]
#![allow(unused_variables)]
#![allow(unused_parens)]
#![allow(non_snake_case)]

#![allow(warnings)]





use std::time::{ Duration, Instant };

//
//
extern crate cliclack;
extern crate comfy_table;
extern crate serde;
extern crate serde_json;
//
//
use cliclack::{ intro, outro };
use cliclack::select;
//
//
mod _furniture;
mod _Medallion;
//
mod deck;
mod run_out;
mod venue_distribution;
mod stages;
//
mod main_suggestions;
//
//

use stages::{ S1_Vacant, S2_Venue, S3_Flop };




fn main () -> Result<(), Box<dyn std::error::Error>> {
	let (stage, play, status, use_previous_result) = main_suggestions::suggestions ()?;
	let start = Instant::now ();
	
	
	if (stage == "Desktop") {
		S2_Venue::__desktop::run ();
	}
	
	/*
		[Leagues, Equals, Equities]
		[Teams, Jerseys]		
		[Elevators]
		[ Different Leagues ]
	*/
	if (stage == "Venue") {
		if (status == "2 Leagued") {
			/*
				[Leagues]
				
					Asks:
						[   ] 2 Leagued to a 1 2 Boat
						[   ] 2 Leagued to a 3 Boat
			
			*/
			if (play == "Venue :: 2 Leagued :: to 3 or 4") {
				// Duration: 44.224770978s
				
				let fonction_name = "3 or 4";
				S2_Venue::pair::achieves_league (
					use_previous_result,
					fonction_name 
				);	
			}
			else if (play == "Venue :: 2 Leagued :: to exactly 3") {
				let fonction_name = "exactly 3";
				S2_Venue::pair::achieves_league (
					use_previous_result,
					fonction_name 
				);	
			}
			else if (play == "Venue :: 2 Leagued :: to exactly 4") {
				let fonction_name = "exactly 4";
				S2_Venue::pair::achieves_league (
					use_previous_result,
					fonction_name 
				);	
			}
		}
		else if (status == "2 Teamed") {
			/*
				Motivate:
					[   ] 2 Teamed to exactly 5 Teamed
						[    ] flop
						[    ] turn
						[    ] river
						
					[   ] 2 Teamed to exactly 4 Teamed
						[    ] flop
						[    ] turn
			*/
			
			
			/*
				[Teams]
			*/
			if (play == "Venue :: 2 Teamed :: to exactly 5 Team") {
				S2_Venue::team::duet_to_quintet::play ();
			}
			if (play == "Venue :: 2 Teamed :: to exactly 4 Team") {
				S2_Venue::team::duet_to_quartet::play ();
			}
			if (play == "Venue :: 2 Teamed") {
				
			}
		}
		else if (status == "Connected Mids") {
			S2_Venue::mid_connectors::play ();
		}
		else if (status == "2 Different Leagues") {
			
			/*
				[ Different Leagues ]
			*/
			
			if (play == "Both Pair") {
				S2_Venue::different::makes_two_pair_on_unpaired_desk ();
			}
		}
	}
	
	if (stage == "Flop") {
		
		/*
			[Teams]
		*/
		if (play == "Flop :: 4 Teamed :: to exactly 5 Team") {
			stages::S3_Flop::four_jerseyed::makes_flush ();
		}
		
		/*	
			[Slides]
		*/
		if (play == "Flop :: 4 Sequential :: to Straight") {
			stages::S3_Flop::four_sequential::makes_straight ();
		}
	}
	
	let duration = start.elapsed ();
	println! ("Duration: {:?}", duration);
	
	Ok (())
}