#ifndef __ILOCALIZATION_MANAGER_H__
#define __ILOCALIZATION_MANAGER_H__

// *****************************************************************************
// 版权所有(C)2023~2099 上海骄成超声波技术有限公司
// 保留所有权利
// *****************************************************************************
// 作者 : 李祥瑞
// 版本 : 1.1
// 代码创建日期:2024/11/20
// 版本更新日期:2024/11/25
// 功能说明:定位算法管理器接口
// *****************************************************************************

#include "ILocalization.h"

namespace JVision
{
	/**
	 * @brief 定位算法管理器接口
	 *
	 */
	class JVision_API ILocalizationManager
	{
	public:
		/**
		 * @brief 构造函数
		 * @param rootDir 数据存储的根目录
		 */
		ILocalizationManager(const std::string& rootDir) {}

		virtual ~ILocalizationManager() {}

		/**
		 * @brief 显示添加页面
		 * @param[in] userRights 用户权限等级 (预留)
		 * @param[in] imgInfo 图像数据
		 * @param[in] localizationName 算法名
		 * @param[in] message 附加信息
		 *
		 * @return int 添加的算法索引, 小于0表示失败
		 */
		virtual int ShowAdd(E_PERMISSION_LEVEL permissionLevel, const ImageInfo& imgInfo, const std::string& localizationName, const std::string& message, int cameraID) = 0;

		/**
		 * @brief 显示编辑页面
		 * @param[in] userRights 用户权限等级 (预留)
		 * @param[in] index 算法索引
		 * @param[in] imgInfo 图像数据
		 * @param[in] message 附加信息
		 *
		 * @return ResultCode 0: 成功, 其他: 失败
		 *
		 * @note 对应的错误码类型可以通过ExecuteErrorCode中接口获取失败信息
		 */
		virtual ResultCode ShowEdit(E_PERMISSION_LEVEL permissionLevel, int index, const ImageInfo& imgInfo, const std::string& message) = 0;

		/**
		 * @brief 移除某个算法(包含存储的数据)
		 * @param[in] index 算法索引
		 *
		 * @return ResultCode 0: 成功, 其他: 失败
		 *
		 * @note 对应的错误码类型可以通过ExecuteErrorCode中接口获取失败信息
		 */
		virtual ResultCode Remove(int index) = 0;

		/**
		 * @brief 获取算法
		 * @param index[in] 算法索引
		 *
		 * @return 算法
		 */
		virtual ILocalization* Get(int index) const = 0;

		/**
		 * @brief 清空数据 & 清空存储文件
		 */
		virtual void Clear() = 0;

		/**
		 * @brief 获取算法存储的目录
		 * @param[in] index 算法索引
		 *
		 * @return std::string 对应算法的目录
		 */
		virtual std::string GetLocalizationDir(int index) const = 0;

		/**
		 * @brief 加载算法
		 * @param[in] rootDir 数据存储的根目录
		 *
		 * @return ResultCode 0: 成功, 其他: 失败
		 *
		 * @note 对应的错误码类型可以通过ExecuteErrorCode中接口获取失败信息
		 */
		virtual ResultCode Load(const std::string& rootDir) = 0;

		/**
		 * @brief 获取算法管理
		 * @param[in] rootDir 数据存储的根目录
		 *
		 * @return ILocalizationManager 算法管理实例
		 */
		static ILocalizationManager* GetILocalizationManager(const std::string& rootDir);

		// 新增照明矫正数据
		static void AddIlluminateData(int cameraID, int min, int max);
		// 删除照明矫正数据
		static void DelIlluminateData(int cameraID);
		// 存储公共数据
		static void SaveCommonData();
	};

} // namespace JVision

#endif