#ifndef RT_WhiteBoard_C_H_
#define RT_WhiteBoard_C_H_

#include "common_c.h"

struct AVDColor{
	uint8 r;
	uint8 g;
	uint8 b;
	uint8 a;
	AVDColor() :r(255), g(255), b(255), a(100){}
	void setcolor(uint8 _r, uint8 _g, uint8 _b, uint8 _a){
		r = _r;
		g = _g;
		b = _b;
		a = _a;
	}
};
/**
* 白板信息结构.
*/
struct AVDWhiteboard{
	AVDColor        clr;
	char            boardId[Max_UserData];
	char            ownId[Max_UserId];///白板创建者
	char			title[Max_UserData];
	char			description[Max_UserData];
	char            filenamebkg[Max_UserData];//背景图地址
	uint32          width;
	uint32          height;
	uint32          displayheight;
	uint32          displaywidth;
	uint32          wndid; //应用层自建窗口白板句柄，SDK在该窗口上绘制
	uint32          parentid; //SDK创建白板窗口，且指定父窗口句柄
	char			toolbar; //toolbar设置为false 创建白板时将不创建ToolBar，需要应用成自定义Toolbar
	char            usetoolbarimg; //开启toolbar图片编辑功能
	
	
	AVDWhiteboard() :width(0), height(0), displayheight(0), displaywidth(0), toolbar(1), usetoolbarimg(0){
		memset(boardId, 0, Max_UserData);
		memset(ownId, 0, Max_UserId);
		memset(title, 0, Max_UserData);
		memset(description, 0, Max_UserData);
		memset(filenamebkg, 0, Max_UserData);
	}
};


typedef struct WhiteBoard_Callback{

	void (*whitebaord_onCreateBoardNotify)(AVDHandle handle, AVDWhiteboard board);
    void (*whitebaord_onCreateLocalBoardNotify)(AVDHandle handle, int ret, const char* bid);
	void (*whitebaord_onRemoveBoardNotify)(AVDHandle handle, const char* bid);
	void (*whitebaord_onUpdateBoardNotify)(AVDHandle handle, const AVDWhiteboard board) ;
	void (*whitebaord_onShareBoardNotify)(AVDHandle handle, const AVDWhiteboard board) ;
	void (*whitebaord_onCloseBoardNotify)(AVDHandle handle, const char* bid) ;
	void (*whitebaord_onSaveBmpNotify)(AVDHandle handle, int ret, const char* filename) ;
	
	WhiteBoard_Callback(){
		whitebaord_onCreateBoardNotify = NULL;
        whitebaord_onCreateLocalBoardNotify = NULL;
		whitebaord_onRemoveBoardNotify = NULL;
		whitebaord_onUpdateBoardNotify = NULL;
		whitebaord_onShareBoardNotify = NULL;
		whitebaord_onCloseBoardNotify = NULL;
		whitebaord_onSaveBmpNotify = NULL;
	}
}*LPWhiteBoard_Callback;


extern "C" {
	
	/**初始化白板模块
	*
	* @param[in] roomHandle 房间句柄。
	* @param[in] 
	* @param[out] whiteboardHandle 白板模块句柄。
	* @return 返回错误代码。
	*/
	RT_API_EXPORT Result avd_whitebord_init(AVDHandle roomHandle, LPWhiteBoard_Callback cb, AVDHandle& whiteboardHandle);
	/**反初始化白板模块
	*
	* @param[in] whiteboardHandle 白板模块句柄。
	* @return 返回错误代码。
	*/
	RT_API_EXPORT Result avd_whitebord_uninit(AVDHandle whiteboardHandle);

	/**创建白板对象,通知其他端也创建自己的白板对象
	*
	* @param[in] whiteboardHandle 白板模块句柄。
	* @return 返回错误代码。
	*/
	RT_API_EXPORT Result avd_createBoard(AVDHandle whiteboardHandle, AVDWhiteboard& wb) ;

	/**显示白板，也通知其他端显示白板
	*
	* @param[in] whiteboardHandle 白板模块句柄。
	* @return 返回错误代码。
	*/
	RT_API_EXPORT Result avd_shareBoard(AVDHandle whiteboardHandle,const char* id) ;

	/**删除白板对象，也通知其他端删除
	*
	* @param[in] whiteboardHandle 白板模块句柄。
	* @return 返回错误代码。
	*/
	RT_API_EXPORT Result avd_removeBoard(AVDHandle whiteboardHandle, const char* id) ;

	/**关闭白板显示，其他端也同样操作
	*
	* @param[in] whiteboardHandle 白板模块句柄。
	* @return 返回错误代码。
	*/
	RT_API_EXPORT Result avd_closeBoard(AVDHandle whiteboardHandle,const char* id) ;

	RT_API_EXPORT Result avd_updateBoard(AVDHandle whiteboardHandle, const char* id, const AVDWhiteboard& wb) ;

	/**获取已经创建的白板对象
	*
	* @param[in] whiteboardHandle 白板模块句柄。
	* @return 返回错误代码。
	*/
	RT_API_EXPORT uint32 avd_getWhiteBoardCount(AVDHandle whiteboardHandle);

	RT_API_EXPORT uint32 avd_getWhiteBoard(AVDHandle whiteboardHandle, uint32 index, AVDWhiteboard& item);

	RT_API_EXPORT Result avd_getWhiteBoards(AVDHandle whiteboardHandle, uint32& count, AVDWhiteboard*& whbs);
	/**显示已经共享的(显示)白板
	*
	* @param[in] whiteboardHandle 白板模块句柄。
	* @return 返回错误代码。
	*/
	RT_API_EXPORT uint32 avd_getSharedWhiteCount(AVDHandle whiteboardHandle);

	RT_API_EXPORT uint32 avd_getSharedWhiteBoard(AVDHandle whiteboardHandle, uint32 index, AVDWhiteboard& item);

	RT_API_EXPORT Result avd_getSharedWhiteBoards(AVDHandle whiteboardHandle,uint32& count, AVDWhiteboard*& whbs);


	/**设置白板背景图
	*
	* @param[in] whiteboardHandle 白板模块句柄。
	* @return 返回错误代码。
	*/
	RT_API_EXPORT Result avd_setBackground(AVDHandle whiteboardHandle, const char* id, const char* filePath, int timeout);
	/**设置白板背景色
	*
	* @param[in] whiteboardHandle 白板模块句柄。
	* @return 返回错误代码。
	*/
	RT_API_EXPORT Result avd_setBackgroundColor(AVDHandle whiteboardHandle,const char* id, uint8 r, uint8 g, uint8 b, uint8 a) ;
	RT_API_EXPORT Result avd_setWidth(AVDHandle whiteboardHandle, const char* id, uint32 w);
	RT_API_EXPORT Result avd_setHeight(AVDHandle whiteboardHandle, const char* id, uint32 h);

	/**白板窗口和父窗口绑定
	*
	* @param[in] whiteboardHandle 白板模块句柄。
	* @return 返回错误代码。
	*/
	RT_API_EXPORT Result avd_attachBoard(AVDHandle whiteboardHandle,const char* bid, uint32 winId) ;
	RT_API_EXPORT Result avd_detachBoard(AVDHandle whiteboardHandle,const char* bid) ;

	/** 重绘所有的注释
	*
	*/
	RT_API_EXPORT Result avd_redrawall(AVDHandle whiteboardHandle);
		
}


#endif//RT_WhiteBoard_C_H_
