BattleUnitImportModels.kt

package io.github.lishangbu.avalon.game.service.unit

import io.github.lishangbu.avalon.game.battle.engine.core.model.AttachedEffectState
import io.github.lishangbu.avalon.game.battle.engine.core.model.UnitCaptureContextState
import io.github.lishangbu.avalon.game.battle.engine.core.model.UnitMetadataState
import io.github.lishangbu.avalon.game.battle.engine.core.model.UnitState

/** 单个招式槽位导入参数。 */
data class BattleMoveImportRequest(
    val moveId: String,
    val currentPp: Int? = null,
)

/** 单位导入边界上的结构化元数据。 */
data class BattleUnitImportMetadata(
    val level: Int,
    val creatureId: Long? = null,
    val creatureInternalName: String? = null,
    val natureId: Long? = null,
    val natureInternalName: String? = null,
    val captureContext: UnitCaptureContextState = UnitCaptureContextState(),
    val ivs: Map<String, Int> = emptyMap(),
    val evs: Map<String, Int> = emptyMap(),
)

/** 真实数据智能导入战斗单位时所需的输入。 */
data class BattleUnitImportRequest(
    val unitId: String,
    val metadata: BattleUnitImportMetadata,
    val abilityInternalName: String? = null,
    val itemId: String? = null,
    val moves: List<BattleMoveImportRequest> = emptyList(),
    val currentHp: Int? = null,
    val statusState: AttachedEffectState? = null,
    val volatileStates: Map<String, AttachedEffectState> = emptyMap(),
    val conditionStates: Map<String, AttachedEffectState> = emptyMap(),
    val boosts: Map<String, Int> = emptyMap(),
    val forceSwitchRequested: Boolean = false,
)

/** 智能导入后的战斗单位结果。 */
data class BattleUnitImportResult(
    val unit: UnitState,
    val creatureId: Long,
    val creatureInternalName: String,
    val creatureName: String,
    val level: Int,
    val requiredExperience: Int,
    val calculatedStats: Map<String, Int>,
)