use forge_foundation::ZoneType;
use crate::game::GameState;
use crate::ids::CardId;
use crate::spellability::SpellAbility;
pub type Spell = super::SpellAbility;
pub fn can_play(sa: &SpellAbility, game: &GameState) -> bool {
let card_id = match sa.source {
Some(id) => id,
None => return false,
};
if game.card_is_in_zone(card_id, ZoneType::Battlefield) {
return false;
}
if super::has_split_second_on_stack(game) && !sa.is_mana_ability {
return false;
}
if !sa.can_cast_timing(game) {
return false;
}
check_restrictions(sa, game)
}
pub fn check_restrictions(sa: &SpellAbility, game: &GameState) -> bool {
sa.can_play(game)
}
pub fn can_play_from_host(sa: &SpellAbility, game: &GameState) -> Option<CardId> {
let card_id = sa.source?;
if game.card_is_in_zone(card_id, ZoneType::Battlefield) {
return None;
}
if super::has_split_second_on_stack(game) && !sa.is_mana_ability {
return None;
}
if !sa.can_cast_timing(game) {
return None;
}
if !sa.can_play(game) {
return None;
}
Some(card_id)
}
pub fn is_counterable_by(sa: &SpellAbility, _counter_sa: &SpellAbility) -> bool {
if sa.ir.cant_be_countered {
return false;
}
true
}
pub fn set_cast_face_down(sa: &mut SpellAbility, face_down: bool) {
sa.cast_face_down = face_down;
}