#include <iostream>
#include <termios.h>
#include <unistd.h>
#include <string.h>

constexpr const char* splash = "osint\n";
constexpr const char* divi = "---- ---- ---- ----\n";

int selection;
std::string ast = "*";

int available_items;

termios orig_termios;

void clear_screen(){
	std::cout << "\033[H\033[2J\033[3J";
}

void splash_screen(){
	std::cout << divi << splash << divi << "\n";
}

void disableRawMode() {
    tcsetattr(STDIN_FILENO, TCSAFLUSH, &orig_termios);
}

void enableRawMode() {
    tcgetattr(STDIN_FILENO, &orig_termios);
    atexit(disableRawMode);

    termios raw = orig_termios;
    raw.c_lflag &= ~(ICANON | ECHO);   // turn off canonical mode & echo
    tcsetattr(STDIN_FILENO, TCSAFLUSH, &raw);
}

/*
==============================
menu system
==============================
*/
void main_menu(){

}

/*
==============================
secondary menus
==============================
*/

void target_menu(){
	
	available_items = 1;
	int target_count = 0;
	std::string target_items[2] = {"add target", "remove target"};
	clear_screen();
	splash_screen();
	std::cout << "Target\n";
	std::cout << "----\n";
	while(target_count <= 1){
		target_items[selection] = ast + target_items[selection];
		std::cout << target_items[target_count] << "\n";
		++target_count;
	}
}

void name_menu(){
/*
%first
%middle
%last
%alias
*/
	available_items = 3;
	std::string name_sub[4] = {"first name", "middle name", "last name", "alias"};
	int name_count = 0;
	clear_screen();
	splash_screen();
	std::cout << "Names\n";
	std::cout << "----\n";
	while (name_count <= 3){
		name_sub[selection] = ast + name_sub[selection];
		std::cout << name_sub[name_count] << "\n";
		++name_count;
	}
}
/*
void contact_menu(){
%phone
%email
%address
}

void employment_menu(){
%company
%address
%phone
%website
}

void vehicle_menu(){
%make
%model
%year
%tag
%tag state
}

void device_menu(){
%smartphone
%computer
%game console
}

void people_menu(){
%family
%friends
%business partners
}

void network_menu(){
%IP addresses
%vpns
%proxies
}

void software_menu(){
%operating systems
%programs
}
*/
int main() {
    enableRawMode();
	
    std::cout << "Press arrow keys (q to quit)\n";
selection = 0;
    while (true) {
        name_menu();
	char c;
        read(STDIN_FILENO, &c, 1);

        if (c == 'q')
            break;

        if (c == '\x1b') { // ESC
            char seq[2];
            if (read(STDIN_FILENO, &seq[0], 1) == 0) continue;
            if (read(STDIN_FILENO, &seq[1], 1) == 0) continue;

            if (seq[0] == '[') {
                switch (seq[1]) {
                    case 'A':  if(selection > 0){
					--selection;
				}
				else{
					selection = available_items;
				} break;			//Up
                    case 'B': if(selection < available_items){
					++selection;
				}
				else{
					selection = 0;
					} break;		//Down
                    case 'C': std::cout << "Right\n"; break;		//Right
                    case 'D': std::cout << "Left\n"; break;		//Left
                }
            }
        }
    }
}

