#ifndef _TUI_SCREEN_H_
#define _TUI_SCREEN_H_
#include <stdint.h>
#include <stdbool.h>

#ifdef __cplusplus
extern "C" {
#endif
	typedef enum ScreenState {
		NONE_SCREEN_STATE,
		BACKUP_SCREEN_STATE,
		BACKUP_SCREEN_CHECKED_STATE,
		BACKUP_SCREEN_QUIZ_STATE,
		RECOVERY_SCREEN_STATE,
		RESTORE_SCREEN_STATE,
		RESTORE_SCREEN_TEXT_LINK_STATE,
		CONFIRM_SCREEN_STATE,
		POPUP_SCREEN_BACKUP_EXIT_STATE,
		POPUP_SCREEN_RESTORE_EXIT_STATE,
		POPUP_SCREEN_RESTORE_FAILED_CHECKSUM_STATE,
	} ScreenState;

	void initScreenState();
	uint8_t* setBackground(uint32_t imageSize, uint32_t imageWidth, uint32_t imageHeight);
	uint8_t* getBackground(uint32_t* imageSize, uint32_t* imageWidth, uint32_t* imageHeight);
	bool isExsitBackground();
	uint32_t saveBackgroundResource(uint32_t index, uint8_t* bgData, uint32_t dataLen);
	void clearBackgroundResource();
	bool validatePngResource(uint8_t* image, uint32_t imageSize, uint32_t imageWidth, uint32_t imageHeight);
	uint32_t showBackground();
	uint32_t setScreenView(uint32_t id, uint32_t x, uint32_t y, uint32_t width, uint32_t height, uint32_t eventImageSize, uint32_t originImageSize, uint32_t extraImageSize);
	bool isExsitScreenView();
	uint32_t saveScreenViewResource(uint8_t* bgData, uint32_t dataLen);

	uint32_t initTuiBackground();
	uint32_t startBackupScreen(uint8_t* mnemonicData);
	uint32_t startRestoreScreen();
	uint32_t startConfirmScreen(uint8_t* transaction);
	uint32_t drawTextImage(uint32_t x, uint32_t y, uint8_t *img, uint32_t length);
	void changeScreenState(ScreenState state);
	ScreenState getScreenState();
	void setPreScreenState(ScreenState preState);
	ScreenState getPreScreenState();
	void redrawScreen(ScreenState screenState);
	void setBackupQuizOrder(uint32_t first, uint32_t second, uint32_t third);
    void setResourceDataArray(uint32_t size, uint8_t *buf);
#ifdef __cplusplus
}
#endif

#endif // _TUI_SCREEN_H_
