use super::{parse_counter_type, EffectContext};
use forge_foundation::ZoneType;
#[manabrew_engine_macros::spell_effect(CountersMoveEffect)]
fn resolve(ctx: &mut EffectContext, sa: &crate::spellability::SpellAbility) {
let counter_type_str = sa
.ir
.counter_type
.as_ref()
.map(|s| s.to_string())
.unwrap_or_else(|| "P1P1".to_string());
let counter_type = parse_counter_type(&counter_type_str);
let amount = super::resolve_numeric_svar(ctx.game, sa, "CounterNum", 1).max(0);
let source_card = sa
.source
.filter(|&cid| ctx.game.card(cid).zone == ZoneType::Battlefield);
let target_card = sa
.target_chosen
.target_card
.filter(|&cid| ctx.game.card(cid).zone == ZoneType::Battlefield);
let (Some(from), Some(to)) = (source_card, target_card) else {
return;
};
if from == to {
return;
}
let current = *ctx
.game
.card(from)
.counters
.get(&counter_type)
.unwrap_or(&0);
let to_move = amount.min(current);
if to_move <= 0 {
return;
}
if ctx.game.card(to).phased_out
|| crate::staticability::static_ability_cant_put_counter::any_cant_put_counter_on_card(
&ctx.game.cards,
ctx.game.card(to),
&counter_type,
)
{
return;
}
ctx.game
.card_mut(from)
.remove_counter(&counter_type, to_move);
ctx.add_counter(
to,
&counter_type,
to_move,
sa,
crate::event::RunParams::default(),
);
}