///|
/// 弦音(频率猎手)专属引擎 - 高频刺客流 & 回声幻影流

// ─── 弦音角色初始化 ───
pub fn init_xian_yin_player() -> PlayerState {
  let cards = xian_yin_cards()
  let hand_ids = ["xy-basic-01", "xy-basic-02", "xy-basic-05", "xy-basic-06", "xy-basic-07", "xy-assassin-01"]
  let hand : Array[Card] = []
  let deck : Array[Card] = []
  let mut i = 0
  while i < hand_ids.length() {
    let mut j = 0
    while j < cards.length() {
      if cards[j].id == hand_ids[i] {
        hand.push(cards[j])
        break
      }
      j = j + 1
    }
    i = i + 1
  }
  let mut k = 0
  while k < cards.length() {
    let card = cards[k]
    let mut in_hand = false
    let mut h = 0
    while h < hand.length() {
      if hand[h].id == card.id { in_hand = true; break }
      h = h + 1
    }
    if !in_hand { deck.push(card) }
    k = k + 1
  }
  {
    id: "xian-yin", name: "弦音", hp: 55, max_hp: 55,
    armor: 0, ap: 3, max_ap: 3,
    hand: hand, deck: deck, discard: [], exiled: [],
    permanent_abilities: [], damage_bonus: 0, armor_per_turn: 0,
    extra_damage_per_armor: 0.0, cards_played_this_turn: 0,
    has_taken_self_damage: false, next_attack_bonus: 0,
    harmonic_active: false, free_second_attack: false, debuffs: [],
  }
}

// ─── 弦音专属卡牌效果处理器 ───
pub fn apply_xian_yin_effect(state : BattleState, card : Card) -> BattleState {
  let mut s = state
  let lv = get_pollution_level(s.pollution)
  let ed = lv.damage_bonus

  match card.id {
    // 高频切割: 4伤害,声爆联动+2
    "xy-basic-01" | "xy-basic-02" | "xy-basic-03" | "xy-basic-04" => {
      let mut dmg = 4 + s.player.damage_bonus + ed + s.player.next_attack_bonus
      // 检查敌人是否有声爆
      let mut has_boom = false
      let mut bi = 0
      while bi < s.enemy.debuffs.length() {
        if s.enemy.debuffs[bi].debuff_type == SonicBoom { has_boom = true; break }
        bi = bi + 1
      }
      if has_boom { dmg = dmg + 2 }
      s = deal_damage_to_enemy(s, dmg, false)
      s
    }
    // 音纹闪避: 4护甲,已打出攻击牌+额外3
    "xy-basic-05" | "xy-basic-06" => {
      let base_armor = if s.player.cards_played_this_turn > 0 { 7 } else { 4 }
      s = add_player_armor(s, base_armor)
      s
    }
    // 谐波感知: 抽2张牌,-5污染
    "xy-basic-07" | "xy-basic-08" => {
      s = draw_cards(s, 2)
      let np = if s.pollution - 5 < 0 { 0 } else { s.pollution - 5 }
      { ..s, pollution: np }
    }
    // 声纹连斩: 3伤害,可免费再打一次
    "xy-assassin-01" => {
      let dmg = 3 + s.player.damage_bonus + ed + s.player.next_attack_bonus
      s = deal_damage_to_enemy(s, dmg, false)
      // 免费再打(模拟多段攻击)
      s = { ..s, player: { ..s.player, free_second_attack: true } }
      s = add_log(s, "Sonic Flurry: can attack again for free!")
      s
    }
    // 共振穿刺: 7伤害+2声爆,有声爆时+3
    "xy-assassin-02" => {
      let mut dmg = 7 + s.player.damage_bonus + ed + s.player.next_attack_bonus
      let mut has_boom = false
      let mut bi = 0
      while bi < s.enemy.debuffs.length() {
        if s.enemy.debuffs[bi].debuff_type == SonicBoom { has_boom = true; break }
        bi = bi + 1
      }
      if has_boom { dmg = dmg + 3 }
      s = deal_damage_to_enemy(s, dmg, false)
      s = add_sonic_boom(s, 2)
      s
    }
    // 超频驱动: 5 AOE伤害,每有一个带声爆的敌人+2
    "xy-assassin-03" => {
      let mut dmg = 5 + s.player.damage_bonus + ed + s.player.next_attack_bonus
      let mut bi = 0
      while bi < s.enemy.debuffs.length() {
        if s.enemy.debuffs[bi].debuff_type == SonicBoom { dmg = dmg + 2 }
        bi = bi + 1
      }
      s = deal_damage_to_enemy(s, dmg, false)
      s
    }
    // 次声潜行: 隐身1回合,下次攻击+8
    "xy-assassin-04" => {
      s = { ..s, player: { ..s.player, next_attack_bonus: s.player.next_attack_bonus + 8 } }
      // 获得护甲代表示踪
      s = add_player_armor(s, 3)
      s = add_log(s, "Infrasonic Stealth: next attack +8!")
      s
    }
    // 回声标记: 永久,回合末复制效果(伤害减半)
    "xy-echo-01" => {
      let ab = { id: "ECHO_MARK", card_id: card.id, name: card.name, effect: card.effect }
      let abs : Array[ActiveAbility] = []
      let mut ai = 0
      while ai < s.player.permanent_abilities.length() { abs.push(s.player.permanent_abilities[ai]); ai = ai + 1 }
      abs.push(ab)
      s = { ..s, player: { ..s.player, permanent_abilities: abs } }
      s = add_log(s, "Echo Mark: cards echo at turn end!")
      s
    }
    // 相位镜像: 复制一张手牌中的攻击牌
    "xy-echo-02" => {
      // 找到第一张攻击牌并复制
      let mut found_idx = -1
      let mut fi = 0
      while fi < s.player.hand.length() {
        if s.player.hand[fi].card_type == Attack { found_idx = fi; break }
        fi = fi + 1
      }
      if found_idx >= 0 {
        let copy = s.player.hand[found_idx]
        let nh : Array[Card] = []
        let mut ci = 0
        while ci < s.player.hand.length() { nh.push(s.player.hand[ci]); ci = ci + 1 }
        nh.push(copy)
        s = { ..s, player: { ..s.player, hand: nh } }
        s = add_log(s, "Phase Mirror: duplicated " + copy.name)
      }
      s
    }
    // 残响追击: 6伤害,打3张以上牌翻倍
    "xy-echo-03" => {
      let mut dmg = 6 + s.player.damage_bonus + ed + s.player.next_attack_bonus
      if s.player.cards_played_this_turn >= 3 { dmg = dmg * 2; s = add_log(s, "Afterimage Pursuit: doubled!") }
      s = deal_damage_to_enemy(s, dmg, false)
      s
    }
    // 全频共振: 声爆特化,每层+3伤害而非+2
    "xy-echo-04" => {
      let ab = { id: "FULL_SPECTRUM", card_id: card.id, name: card.name, effect: card.effect }
      let abs : Array[ActiveAbility] = []
      let mut ai = 0
      while ai < s.player.permanent_abilities.length() { abs.push(s.player.permanent_abilities[ai]); ai = ai + 1 }
      abs.push(ab)
      // 额外声爆伤害标记(声爆结算时每层3点而非2点)
      s = { ..s, player: { ..s.player, permanent_abilities: abs, damage_bonus: s.player.damage_bonus + 2 } }
      s = add_log(s, "Full Spectrum Resonance: sonic boom now 3 dmg/stack!")
      s
    }
    _ => s
  }
}

// ─── 弦音遗物效果:断裂琴弦 ───
// 每回合前2张攻击牌,若未被格挡,额外+2声爆
pub fn apply_xian_yin_relic(state : BattleState, cards_played : Int) -> BattleState {
  if cards_played < 2 {
    // 自动附加声爆(模拟"未被格挡的额外效果")
    add_sonic_boom(state, 2)
  } else {
    state
  }
}

// ─── 回声标记结算(回合末) ───
pub fn settle_echo_mark(state : BattleState) -> BattleState {
  let mut s = state
  // 检查是否有回声标记能力
  let mut has_echo = false
  let mut ei = 0
  while ei < s.player.permanent_abilities.length() {
    if s.player.permanent_abilities[ei].id == "ECHO_MARK" { has_echo = true; break }
    ei = ei + 1
  }
  if has_echo && s.player.cards_played_this_turn > 0 {
    // 回声:造成本回合总伤害的50%(额外伤害)
    let extra = if s.player.cards_played_this_turn >= 3 { 4 } else { 2 }
    s = deal_damage_to_enemy(s, extra, false)
    s = add_log(s, "Echo Mark: resonated for " + extra.to_string() + " bonus dmg!")
  }
  s
}