#pragma once

#include "CookConfig.h"
#include <string>
#include <vector>
#include <list>

#include "CookTaskInfoBase.h"

U_NS_BEGIN_CATERING

// 菜谱预加载类
class ICookMenuPrepare
{
public:
	ICookMenuPrepare();
	virtual ~ICookMenuPrepare();

    /** \brief  初始化，主要对bin文件校验
	* \return bin文件有效返回true,否则返回false
    */
	bool Init(const unsigned char* pBinData, size_t iBinLen);

    /** \brief  获取菜谱数据（xml文件格式的字节流，比如 糖醋菠萝骨.xml 文件的字节流）
    * \return 返回对应的字节流，0表示失败
    */
    const std::vector<unsigned char>* GetRecipeData();

	/** \brief  获取菜谱bin
	*
	* \param pBinSize[out]  bin数据的长度
	* \return 返回对应的字节流，0表示失败
	*/
	const char* GetBinData(size_t* pBinSize) const;
    

	/** \brief  获取任务信息
	* \return true表示成功,taskItem为返回任务信息，false表示失败
	*
	*/
	bool GetTaskInfo(std::list<task_item_t> &taskItem);

private:
    // 禁用拷贝
	U_DISABLE_COPY(ICookMenuPrepare)

	// 将##之间的内容替换为参数表中的值
	bool Replace(std::string& src);
	// 通过key，或者参数的值
	std::string GetValue(const std::string& key)const;

private:
	std::vector<unsigned char> m_RecipeData;
	char* m_pBinData;
	size_t m_binSize;
	bool m_prepared;
	void* m_pCookData;
};

U_NS_END_CATERING

