SmartImportingEffectDefinitionRepository.kt

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

import io.github.lishangbu.avalon.game.battle.engine.core.dsl.EffectDefinition
import io.github.lishangbu.avalon.game.battle.engine.spi.effect.EffectDefinitionRepository
import java.util.concurrent.ConcurrentHashMap

/**
 * 带缓存的智能导入 effect 仓库。
 */
class SmartImportingEffectDefinitionRepository(
    private val importService: SmartBattleEffectImportService,
) : EffectDefinitionRepository {
    private val cache: MutableMap<String, EffectDefinition> = ConcurrentHashMap()

    override fun get(id: String): EffectDefinition =
        cache[id]
            ?: importService.importEffect(id)?.also { imported -> cache[id] = imported }
            ?: error("Effect '$id' was not found in move/ability/item dataset.")

    override fun contains(id: String): Boolean = cache.containsKey(id) || importService.importEffect(id)?.also { imported -> cache[id] = imported } != null
}