use crate::payment::Payment;
use crate::score::{FuValue, HanValue};
#[derive(Debug)]
pub enum LimitHands {
Mangan,
Haneman,
Baiman,
Sanbaiman,
KazoeYakuman,
}
impl LimitHands {
fn is_limit_hand(han: HanValue, fu: FuValue) -> bool {
if han >= 5 {
return true;
}
if han == 4 && fu >= 40 {
return true;
}
if han == 3 && fu >= 70 {
return true;
}
false
}
pub fn get_limit_hand(han: HanValue, fu: FuValue) -> Option<Self> {
if !Self::is_limit_hand(han, fu) {
return None;
}
if han <= 5 {
Some(Self::Mangan)
} else if han <= 7 {
Some(Self::Haneman)
} else if han <= 10 {
Some(Self::Baiman)
} else if han <= 12 {
Some(Self::Sanbaiman)
} else {
Some(Self::KazoeYakuman)
}
}
pub fn get_score(&self) -> Payment {
let base_points = match self {
Self::Mangan => 2_000,
Self::Haneman => 3_000,
Self::Baiman => 4_000,
Self::Sanbaiman => 6_000,
Self::KazoeYakuman => 8_000,
};
Payment::new(base_points)
}
}