BattleSettlementPlan.kt

package io.github.lishangbu.avalon.game.battle.engine.application

import io.github.lishangbu.avalon.game.battle.engine.core.model.BattleType
import io.github.lishangbu.avalon.game.battle.engine.core.session.BattleSessionQuery

/**
 * 引擎为战后阶段生成的任务计划。
 *
 * 设计意图:
 * - 把“这场 battle 在战后到底需要执行哪些副作用”先表达成计划;
 * - 让 game 模块只负责执行计划,而不是再自己推导 battleKind 与结算分支;
 * - 避免旧的 callback/support 风格把 game 副作用回调反向泄漏进引擎。
 */
data class BattleSettlementPlan(
    val sessionId: String,
    val battleKind: BattleType,
    val endedReason: String?,
    val session: BattleSessionQuery,
    val tasks: List<BattleSettlementTask>,
)

/**
 * 引擎可规划出的标准结算任务。
 */
enum class BattleSettlementTask {
    /**
     * 消费 battle 内捕捉账本,并把真实资源扣减/落库存留给 game 执行。
     */
    SETTLE_CAPTURE_LEDGER,

    /**
     * 把 battle 从 `ENDED_UNSETTLED` 推进到 `SETTLED`。
     */
    MARK_SESSION_SETTLED,
}