#pragma once

#include "character/CharacterActionTypes.h"
#include "character/CharacterDataLoader.h"
#include <map>
#include <optional>
#include <string>

namespace frostbite2D {

/// 管理角色显式注册的逻辑动作。
///
/// 动画配置只负责提供资源标签，不再自动推导哪些逻辑动作存在。
/// 基础状态动作和职业技能入口都在代码中显式注册，让技能实现类自己决定
/// 当前要播放哪个 ani。
class CharacterActionLibrary {
public:
  bool LoadForConfig(const character::CharacterConfig& config);
  const CharacterActionDefinition* FindAction(const std::string& actionId) const;
  const CharacterActionDefinition* GetDefaultAction() const;
  std::string DescribeActionIds() const;

private:
  bool BuildExplicitActionRegistry(const character::CharacterConfig& config);

  std::map<std::string, CharacterActionDefinition> actions_;
};

std::optional<CharacterActionLibrary> loadCharacterActionLibrary(
    const character::CharacterConfig& config);

} // namespace frostbite2D
