#pragma once

#include <BAN/NoCopyMove.h>
#include <BAN/String.h>
#include <BAN/Optional.h>
#include <BAN/Vector.h>

#include <sys/types.h>
#include <termios.h>

class Input
{
	BAN_NON_COPYABLE(Input);
	BAN_NON_MOVABLE(Input);
public:
	Input();

	BAN::Optional<BAN::String> get_input(BAN::Optional<BAN::StringView> custom_prompt);

private:
	BAN::String parse_ps1_prompt();

private:
	BAN::String m_hostname;

	BAN::Vector<BAN::String> m_buffers;
	size_t m_buffer_index { 0 };
	size_t m_buffer_col { 0 };

	BAN::Optional<ssize_t> m_tab_index;
	BAN::Optional<BAN::Vector<BAN::String>> m_tab_completions;
	size_t m_tab_completion_keep { 0 };

	int m_waiting_utf8 { 0 };
};