use forge_foundation::ZoneType;
use crate::card::{valid_filter, Card};
use crate::combat::DefenderId;
use crate::staticability::StaticMode;
pub fn get_attack_cost(cards: &[Card], attacker: &Card, defender: DefenderId) -> i32 {
let mut total_cost = 0;
for source in cards.iter().filter(|c| c.zone == ZoneType::Battlefield) {
for sa in &source.static_abilities {
if !sa.check_mode(&StaticMode::CantAttackUnless) {
continue;
}
if !valid_filter::matches_valid_card_selector_opt(
sa.ir.valid_card.as_ref(),
attacker,
source,
) {
continue;
}
if let Some(target_param) = sa.ir.target_text.as_deref() {
match target_param {
"You" => {
let defends_controller = match defender {
DefenderId::Player(pid) => pid == source.controller,
DefenderId::Permanent(cid) => {
cards[cid.index()].controller == source.controller
}
};
if !defends_controller {
continue;
}
}
_ => {
}
}
}
if let Some(cost_str) = sa.ir.cost.as_deref() {
if let Ok(cost) = cost_str.trim().parse::<i32>() {
total_cost += cost;
}
}
}
}
total_cost
}