/**
 * @file Light.h
 * @brief 光源句柄与光照参数访问接口定义。
 * @details
 * light 封装渲染层光源实例的轻量句柄语义，支持：
 * - 启停、强度、颜色等常用光照属性读写；
 * - 查询光源类型与绑定实体；
 * - 通过 light_set_key 区分不同光照集合。
 */
#pragma once
#include "CommonHeader.h"

namespace XEngine::graphics {


/**
 * @brief 光源强类型标识符。
 */
DEFINE_TYPED_ID(light_id);

/**
 * @brief 光源句柄对象。
 */
class light
{
public:
	/**
	 * @brief 光源类型枚举。
	 */
	enum type :u32
	{
		directioinal,
		point,
		spot,

		count
	};

	constexpr explicit light(light_id id, u64 light_set_key) 
		:_light_set_key{ light_set_key }, _id { id } {}
	constexpr light() = default;
	constexpr light_id get_id() const { return _id; }
	constexpr u64 get_light_set_key() const { return _light_set_key; }
	constexpr bool is_valid() const { return id::is_valid(_id); }

	/**
	 * @brief 设置光源启用状态。
	 * @param is_enabled true 表示启用。
	 */
	void is_enabled(bool is_enabled) const;
	/**
	 * @brief 设置光照强度。
	 * @param intensity 光照强度值。
	 */
	void intensity(f32 intensity) const;
	/**
	 * @brief 设置光照颜色。
	 * @param color RGB 颜色。
	 */
	void color(math::v3 color) const;
	
	/**
	 * @brief 查询光源启用状态。
	 * @return 启用返回 true。
	 */
	bool is_enabled( ) const;
	/**
	 * @brief 查询光照强度。
	 * @return 当前强度值。
	 */
	f32 intensity( ) const;
	/**
	 * @brief 查询光照颜色。
	 * @return 当前 RGB 颜色。
	 */
	math::v3 color( ) const;

	

	/**
	 * @brief 查询光源类型。
	 * @return 光源类型枚举值。
	 */
	type light_type() const;
	/**
	 * @brief 查询绑定实体 ID。
	 * @return 实体 ID。
	 */
	id::id_type entity_id() const;

private:
	u64			_light_set_key{ 0 };
	light_id	_id{ id::invalid_id };
};


}
