#include "Vendor_Interface.h"
#include "TZ_Vendor_Tui_tl.h"
#include "TuiScreenProperty.h"

uint32_t showPng(uint32_t x, uint32_t y, uint8_t *pngData, uint32_t length) {
	rotationCoordinates(&x, &y, pngData);
	uint32_t ret = showPng_vendor(x, y, pngData, length, (uint32_t)getRotationType());
	if (ret == SUCCESS_BC_TUI || ret == ERROR_BC_TUI_FAILED_DRAW_IMAGE || ret == ERROR_BC_TUI_NO_SESSION) {
		return ret;
	}
	return ERROR_BC_TUI;
}
uint32_t drawImage(uint32_t x, uint32_t y, uint8_t *pngData, uint32_t length) {
	rotationCoordinates(&x, &y, pngData);
	return drawImage_vendor(x, y, pngData, length, (uint32_t)getRotationType());
}
uint32_t showFrameBuffer() {
	return showFrameBuffer_vendor();
}
uint32_t getScreenInfo(uint32_t *width_out, uint32_t *height_out) { // output params
	return getScreenInfo_vendor(width_out, height_out);
}
uint32_t getTuiEvent(uint32_t *x_out, uint32_t *y_out, uint32_t *type_out) { // output params
	return getTuiEvent_vendor(x_out, y_out, type_out);
}
void registerTuiTouchCallback(uint32_t(*func)(uint32_t func_x, uint32_t func_y, uint32_t func_type)) {
	registerTuiTouchCallback_vendor(func);
}
uint32_t startTuiSession(uint8_t* bgImage, uint32_t bgImageSize) {
	initScreenProperty();
	return startTuiSession_vendor(bgImage, bgImageSize, (uint32_t)getRotationType());
}
uint32_t closeTuiSession() {
	return closeTuiSession_vendor();
}

uint32_t getNotifyMask(uint32_t isNotify) {
	return getNotifyMask_vendor(isNotify);
}

uint32_t createTouchThread(uint32_t cmdId) {
	return createTouchThread_vendor(cmdId);
}

bool isStartTuiWithBackground() {
	return isStartTuiWithBackground_vendor();
}

void initPinpad() {
	initPinpad_vendor();
}

uint32_t processCmdPinpad(uint32_t cmd_id, tciMessage_t * sendmsg, uint32_t sendmsg_len, tciMessage_t * respmsg, uint32_t respmsg_len) {
	initScreenProperty();
	return processCmdPinpad_vendor(cmd_id, sendmsg, sendmsg_len, respmsg, respmsg_len);
}

uint32_t processTuiEvent(bool * tryAgain, bool check_cancel_event_only) {
	return processTuiEvent_vendor(tryAgain, check_cancel_event_only);
}

uint32_t processTuiEvents(bool check_cancel_event_only) {
	return processTuiEvents_vendor(check_cancel_event_only);
}

bool validateSoVersion(uint8_t* so) {
	return validateSoVersion_vendor(so);
}

uint32_t wrapDataForBcCore(uint8_t * app_name, uint32_t app_name_len, uint8_t * data, uint32_t size, uint8_t * wrap_data, uint32_t * wrap_size) {
	return wrapDataForBcCore_vendor(app_name, app_name_len, data, size, wrap_data, wrap_size);
}

uint64_t getUptime() {
	return getUptime_vendor();
}

uint32_t getReturnCode() {
	return getReturnCode_vendor();
}
