/*
 * Copyright (c) 2018 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: Apache-2.0
 */
#ifndef SHELL_TYPES_H__
#define SHELL_TYPES_H__


#ifdef __cplusplus
extern "C" {
#endif

enum shell_vt100_color {
	SHELL_VT100_COLOR_BLACK,
	SHELL_VT100_COLOR_RED,
	SHELL_VT100_COLOR_GREEN,
	SHELL_VT100_COLOR_YELLOW,
	SHELL_VT100_COLOR_BLUE,
	SHELL_VT100_COLOR_MAGENTA,
	SHELL_VT100_COLOR_CYAN,
	SHELL_VT100_COLOR_WHITE,

	SHELL_VT100_COLOR_DEFAULT,

	VT100_COLOR_END
};

struct shell_vt100_colors {
	enum shell_vt100_color col; /*!< Text color. */
	enum shell_vt100_color bgcol; /*!< Background color. */
};

struct shell_multiline_cons {
	uint16_t cur_x;     /*!< horizontal cursor position in edited command line.*/
	uint16_t cur_x_end; /*!< horizontal cursor position at the end of command.*/
	uint16_t cur_y;     /*!< vertical cursor position in edited command.*/
	uint16_t cur_y_end; /*!< vertical cursor position at the end of command.*/
	uint16_t terminal_hei; /*!< terminal screen height.*/
	uint16_t terminal_wid; /*!< terminal screen width.*/
	uint8_t name_len;   /*!<console name length.*/
};

struct shell_vt100_ctx {
	struct shell_multiline_cons cons;
	struct shell_vt100_colors col;
	uint16_t printed_cmd;  /*!< printed commands counter */
};

#ifdef __cplusplus
}
#endif

#endif /* SHELL_TYPES_H__ */
