#ifndef __KMRUNNEROPTIONS_H__
#define __KMRUNNEROPTIONS_H__

#include <boost/program_options.hpp>

#include "common/KMOptions.h"

namespace opt = boost::program_options;

/**
 * @brief 开明运行命令行参数解析
 */
class KMRunnerOptions : public KMOptions
{
public:
    KMRunnerOptions();
    virtual ~KMRunnerOptions() = default;

    /**
     * @brief 获取启动命令
     * @return string 返回启动命令
     */
    std::string getCommand();

    /**
     * @brief 获取appid
     * @return string 返回appid
     */
    std::string getAppId();

    /**
     * @brief 获取启动参数
     * @return vector<string> 返回启动参数
     */
    std::vector<std::string> getArgs();

    /**
     * @brief 获取devel开发运行时
     * @return bool true 开发运行时, false 非开发运行时
     */
    bool isDevel();

    /**
     * @brief 获取是否启动文件转发
     * @return bool true 启动, false 不启动
     */
    bool isFileWarding();

protected:
    /**
     * @brief 命令行参数解析后操作
     */

    void preParseHook() override;
    /**
     * @brief 命令行参数解析后操作
     */

    void postParseHook() override;
    /**
     * @brief 命令行参数添加描述选项
     */
    void addOptions();

    /**
     * @brief 命令行参数检查项
     */
    void checkOptions(const opt::variables_map &varsMap);

private:
    class Private;
    std::shared_ptr<Private> d_ptr;
};
#endif
