#pragma once

namespace frostbite2D {

/**
 * @brief 2D 渲染风格预设 ID
 */
enum class RenderStyleProfileId {
  PixelArt2D, ///< 世界与 UI 都按像素风策略渲染
  Smooth2D,   ///< 世界与 UI 都按平滑 2D 策略渲染
  Hybrid2D    ///< 世界走像素风，UI 走平滑策略
};

/**
 * @brief 渲染风格作用层级
 */
enum class RenderStyleLayerRole {
  World, ///< 世界层，如地图、角色、场景特效
  UI     ///< UI 层，如 HUD、菜单、文字
};

/**
 * @brief 单个层级的渲染风格开关集合
 */
struct RenderStyleLayerSettings {
  bool cameraPixelSnap = false;     ///< 是否让相机位置吸附到像素网格
  bool vertexPixelSnap = false;     ///< 是否让世界顶点在提交前做像素对齐
  bool pixelArtSampling = false;    ///< 是否优先使用像素风采样（如 GL_NEAREST）
  bool shrinkSubTextureUVs = false; ///< 是否对子纹理 UV 做向内收缩，减轻图集边缘闪烁
};

/**
 * @brief 一套完整的 2D 渲染风格设置
 */
struct RenderStyleSettings {
  RenderStyleLayerSettings world; ///< 世界层使用的渲染风格
  RenderStyleLayerSettings ui;    ///< UI 层使用的渲染风格

  /**
   * @brief 根据预设 ID 生成对应的渲染风格
   */
  static RenderStyleSettings FromProfile(RenderStyleProfileId profile) {
    RenderStyleSettings settings;

    switch (profile) {
      case RenderStyleProfileId::PixelArt2D:
        settings.world = {true, true, true, true};
        settings.ui = {true, true, true, true};
        break;
      case RenderStyleProfileId::Smooth2D:
        settings.world = {false, false, false, false};
        settings.ui = {false, false, false, false};
        break;
      case RenderStyleProfileId::Hybrid2D:
      default:
        settings.world = {true, true, true, true};
        settings.ui = {false, false, false, false};
        break;
    }

    return settings;
  }

  /**
   * @brief 获取指定层级对应的风格设置
   */
  const RenderStyleLayerSettings& layer(RenderStyleLayerRole role) const {
    return role == RenderStyleLayerRole::UI ? ui : world;
  }
};

} // namespace frostbite2D
