/**
 * Copyright (C) 2025 ROKAE (Beijing) Technology Co., LTD. 
 * All Rights Reserved.
 * 
 * Information in this file is the intellectual property of Rokae Technology Co., Ltd,
 * And may contains trade secrets that must be stored and viewed confidentially.
 * 
 * @file hooks_args_api.hpp
 * @brief 具体的hooks对应的事件触发实现
 */

#pragma once

#include <memory>
#include <string>

namespace xcore_api{
namespace hooks{

/**
 * @brief 所有hooks参数的基类 
 */
class HookArgsBaseAPI{
public:
    HookArgsBaseAPI(){};
    virtual ~HookArgsBaseAPI(){};
};


/**
 * @brief 增删改查信息
 */
enum CURDAPI{
    CREATE,
    UPDATE,
    READ,
    DELETE
};
//前向声明
class HookPointArgsImpl;

/**
 * @brief 点位回调参数的具体实现
 */
class HookPointArgsAPI:public HookArgsBaseAPI{
public:
    HookPointArgsAPI();
    virtual ~HookPointArgsAPI();
public:
    /**
     * @brief 获取点位名称
     * @return 点位名 
     */
    const std::string GetPointName() const;

    /**
     * @brief 设置点位名称
     * @param name 点位名
     * @return true 成功
     * @return false 失败
     */
    bool SetPointName(const std::string &name);

    /**
     * @brief 获取当前参数的操作，增/删/改
     * @return 具体操作
     */
    const CURDAPI GetOperate() const ;

    /**
     * @brief 设置参数具体操作类型
     * @param operate 增/删/改
     * @return true 成功
     * @return false 失败
     */
    bool SetOperate(const CURDAPI &operate);

private:
    std::shared_ptr<HookPointArgsImpl> pimpl;
};


//前向声明
class HookPPToLineArgsImpl;
/**
 * @brief 点位回调参数的具体实现
 */
class HookPPToLineArgsAPI:public HookArgsBaseAPI{
public:
    HookPPToLineArgsAPI();
    virtual ~HookPPToLineArgsAPI();
public:
     /**
     * @brief 获取跳转到所在文件名称
     * @return 程序跳转的文件名
     */
    const std::string GetFileName() const;

    /**
     * @brief 设置通知文件名称
     * @param name 文件名
     * @return true 成功
     * @return false 失败
     */
    bool SetFileName(const std::string &name);

    /**
     * @brief 获取跳转的文件行数
     * @return 具体行
     */
    const int GetFileLine() const;

    /**
     * @brief 设置跳转文件的具体行
     * @param line 具体行数
     * @return true 成功
     * @return false 失败
     */
    bool SetFileLine(const int line);

     /**
     * @brief 获取跳转的任务名
     * @return 具体任务名
     */
    const std::string GetTaskName() const;

    /**
     * @brief 设置跳转到的任务名
     * @param name 具体任务名
     * @return true 成功
     * @return false 失败
     */
    bool SetTaskName(const std::string &name);


private:
    std::shared_ptr<HookPPToLineArgsImpl> pimpl;
};



}
}