#ifndef _CDRAWABLE
#define _CDRAWABLE

#include "types.h"

#include "Kyoto/Math/CAABox.hpp"

// TODO
enum EDrawableType {
  kDT_WorldSurface,
  kDT_Particle,
  kDT_Actor,
  kDT_SimpleShadow,
  kDT_Decal,
  kDT_Invalid = 0xFFFF,
};

class CDrawable {
public:
  CDrawable(ushort dtype, ushort extraSort, float planeDot, const CAABox& aabb, void* data)
  : x0_type(dtype), x2_extraSort(extraSort), x4_data(data), x8_aabb(aabb), x20_viewDist(planeDot) {}
  // CDrawable(const CDrawable& other)
  // : x0_type(other.x0_type)
  // , x2_extraSort(other.x2_extraSort)
  // , x4_data(other.x4_data)
  // , x8_aabb(other.x8_aabb)
  // , x20_viewDist(other.x20_viewDist) {}

  EDrawableType GetType() const { return EDrawableType(x0_type); }
  const CAABox& GetBounds() const { return x8_aabb; }
  float GetDistance() const { return x20_viewDist; }
  void* GetData() { return x4_data; }
  const void* GetData() const { return x4_data; }
  u16 GetExtraSort() const { return x2_extraSort; }

private:
  ushort x0_type;
  ushort x2_extraSort;
  void* x4_data;
  CAABox x8_aabb;
  float x20_viewDist;
};

#endif // _CDRAWABLE
