#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_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(void);
	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(void);
	uint32_t saveBackgroundResource(uint32_t index, uint8_t* bgData, uint32_t dataLen);
	void clearBackgroundResource(void);
	bool validatePngResource(uint8_t* image, uint32_t imageSize, uint32_t imageWidth, uint32_t imageHeight);
	uint32_t showBackground(void);
	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(void);
	uint32_t saveScreenViewResource(uint8_t* bgData, uint32_t dataLen);

	uint32_t initTuiBackground(void);
	uint32_t startBackupScreen(uint8_t* mnemonicData);
	uint32_t startRestoreScreen(void);
	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);
	void setPreScreenState(ScreenState preState);
	ScreenState getPreScreenState(void);
	void redrawScreen(ScreenState screenState);
	void setBackupQuizOrder(uint32_t first, uint32_t second, uint32_t third);
    bool setResourceDataArray(uint32_t size, uint8_t *buf);
#ifdef __cplusplus
}
#endif

#endif // _TUI_SCREEN_H_
