use crate::balatro::deck::{Rank, Suit};
use crate::balatro::play::PokerHandKind;
use crate::balatro_enum;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Joker {
pub kind: JokerKind,
pub price: u64,
pub edition: Option<JokerEdition>,
pub rental: bool,
pub lifespan: Lifespan,
}
balatro_enum!(JokerEdition {
Foil = "e_foil",
Holographic = "e_holo",
Polychrome = "e_polychrome",
Negative = "e_negative"
});
balatro_enum!(JokerKind {
Joker = "j_joker",
GreedyJoker = "j_greedy_joker",
LustyJoker = "j_lusty_joker",
WrathfulJoker = "j_wrathful_joker",
GluttenousJoker = "j_gluttenous_joker",
Jolly = "j_jolly",
Zany = "j_zany",
Mad = "j_mad",
Crazy = "j_crazy",
Droll = "j_droll",
Sly = "j_sly",
Wily = "j_wily",
Clever = "j_clever",
Devious = "j_devious",
Crafty = "j_crafty",
Half = "j_half",
EightBall { probability: u64 } = "j_8_ball",
Stencil { xmult: u64 } = "j_stencil",
FourFingers = "j_four_fingers",
Mime = "j_mime",
CreditCard = "j_credit_card",
Ceremonial { mult: u64 } = "j_ceremonial",
Banner = "j_banner",
MysticSummit = "j_mystic_summit",
Marble = "j_marble",
LoyaltyCard { left: u64 } = "j_loyalty_card",
Misprint = "j_misprint",
Dusk = "j_dusk",
RaisedFist = "j_raised_fist",
Chaos = "j_chaos",
Fibonacci = "j_fibonacci",
SteelJoker { xmult: f64 } = "j_steel_joker",
ScaryFace = "j_scary_face",
Abstract { mult: u64 } = "j_abstract",
DelayedGrat = "j_delayed_grat",
Hack = "j_hack",
Pareidolia = "j_pareidolia",
GrosMichel { probability: u64 } = "j_gros_michel",
EvenSteven = "j_even_steven",
OddTodd = "j_odd_todd",
Scholar = "j_scholar",
Business { probability: u64 } = "j_business",
Supernova = "j_supernova",
RideTheBus { mult: u64 } = "j_ride_the_bus",
Space { probability: u64 } = "j_space",
Egg = "j_egg",
Burglar = "j_burglar",
Blackboard = "j_blackboard",
Runner { chips: u64 } = "j_runner",
IceCream { chips: u64 } = "j_ice_cream",
Dna { active: bool } = "j_dna",
Splash = "j_splash",
BlueJoker { chips: u64 } = "j_blue_joker",
SixthSense = "j_sixth_sense",
Constellation { xmult: f64 } = "j_constellation",
Hiker = "j_hiker",
Faceless = "j_faceless",
GreenJoker { mult: u64 } = "j_green_joker",
Superposition = "j_superposition",
TodoList { poker_hand: PokerHandKind } = "j_todo_list",
Cavendish { probability: u64 } = "j_cavendish",
CardSharp = "j_card_sharp",
RedCard { mult: u64 } = "j_red_card",
Madness { xmult: f64 } = "j_madness",
Square { chips: u64 } = "j_square",
Seance = "j_seance",
RiffRaff = "j_riff_raff",
Vampire { xmult: f64 } = "j_vampire",
Shortcut = "j_shortcut",
Hologram { xmult: f64 } = "j_hologram",
Vagabond = "j_vagabond",
Baron = "j_baron",
Cloud9 { earnings: u64 } = "j_cloud_9",
Rocket { earnings: u64 } = "j_rocket",
Obelisk { xmult: f64 } = "j_obelisk",
MidasMask = "j_midas_mask",
Luchador = "j_luchador",
Photograph = "j_photograph",
Gift = "j_gift",
TurtleBean { hand_size: u64 } = "j_turtle_bean",
Erosion { mult: u64 } = "j_erosion",
ReservedParking { probability: u64 } = "j_reserved_parking",
Mail { rank: Rank } = "j_mail",
ToTheMoon = "j_to_the_moon",
Hallucination { probability: u64 } = "j_hallucination",
FortuneTeller { mult: u64 } = "j_fortune_teller",
Juggler = "j_juggler",
Drunkard = "j_drunkard",
Stone { chips: u64 } = "j_stone",
Golden = "j_golden",
LuckyCat { xmult: f64 } = "j_lucky_cat",
Baseball = "j_baseball",
Bull = "j_bull",
DietCola = "j_diet_cola",
Trading = "j_trading",
Flash { mult: u64 } = "j_flash",
Popcorn { mult: u64 } = "j_popcorn",
Trousers { mult: u64 } = "j_trousers",
Ancient { suit: Suit } = "j_ancient",
Ramen { xmult: f64 } = "j_ramen",
WalkieTalkie = "j_walkie_talkie",
Selzer { hands_left: u64 } = "j_selzer",
Castle { chips: u64, suit: Suit } = "j_castle",
Smiley = "j_smiley",
Campfire { xmult: f64 } = "j_campfire",
Ticket = "j_ticket",
MrBones = "j_mr_bones",
Acrobat = "j_acrobat",
SockAndBuskin = "j_sock_and_buskin",
Swashbuckler { mult: u64 } = "j_swashbuckler",
Troubadour = "j_troubadour",
Certificate = "j_certificate",
Smeared = "j_smeared",
Throwback { xmult: f64 } = "j_throwback",
HangingChad = "j_hanging_chad",
RoughGem = "j_rough_gem",
Bloodstone { probability: u64 } = "j_bloodstone",
Arrowhead = "j_arrowhead",
OnyxAgate = "j_onyx_agate",
Glass { xmult: f64 } = "j_glass",
RingMaster = "j_ring_master",
FlowerPot = "j_flower_pot",
Blueprint = "j_blueprint",
Wee { chips: u64 } = "j_wee",
MerryAndy = "j_merry_andy",
Oops = "j_oops",
Idol { rank: Rank, suit: Suit } = "j_idol",
SeeingDouble = "j_seeing_double",
Matador = "j_matador",
HitTheRoad { xmult: f64 } = "j_hit_the_road",
Duo = "j_duo",
Trio = "j_trio",
Family = "j_family",
Order = "j_order",
Tribe = "j_tribe",
Stuntman = "j_stuntman",
Invisible { rounds: u64 } = "j_invisible",
Brainstorm = "j_brainstorm",
Satellite { earnings: u64 } = "j_satellite",
ShootTheMoon = "j_shoot_the_moon",
DriversLicense { cards: u64 } = "j_drivers_license",
Cartomancer = "j_cartomancer",
Astronomer { xmult: f64 } = "j_astronomer",
Burnt = "j_burnt",
Bootstraps { mult: u64 } = "j_bootstraps",
Caino { xmult: f64 } = "j_caino",
Triboulet = "j_triboulet",
Yorick { xmult: f64 } = "j_yorick",
Chicot = "j_chicot",
Perkeo = "j_perkeo",
});
#[derive(Serialize, Deserialize, Debug, Clone)]
pub enum Lifespan {
Normal,
Eternal,
Perishable { rounds_left: u64 },
}