#include "..\CookHeader.h"

// 구조체 및 전역 변수 선언 부분
typedef struct _Node {
	string data; // URL
	struct _Node* link = NULL;
} Node;

Array <Node*> memory;
Node* head, * current, * pre;
string currentURL;

// 함수 선언 부분
void printNodes(Node* start) {
	if (start == NULL)
		return;
	Node* current = start;
	print(current->data);
	while (current->link != NULL) {
		current = current->link;
		print(current->data);
	}
	println("");
}

void freeMemory() { // 할당된 모든 노드의 메모리를 해제한다.
	for (int i = 0; i < len(memory); i++)
		delete memory[i];
}

string findPrevURL(string cUrl) {
	current = head;
	if (head->data == cUrl)
		return "";	// 빈 주소 반환
	while (current->link != NULL) {
		pre = current;
		current = current->link;
		if (current->data == cUrl) {
			return pre->data;
		}
	}
}

string findNextURL(string cUrl) {
	current = head;
	if (head->data == cUrl)
		return current->link->data;
	while (current->link != NULL) {
		current = current->link;
		if (current->data == cUrl) {
			if (current->link == NULL) {
				return "";
			}
			else {
				return current->link->data;
			}
		}
	}
}

// 메인 코드 부분
int main() {
	string url;
	Node* node = new Node;
	while (true) {
		input(url, "URL : ");		
		if (url == "x" || url == "X")
			break;
		currentURL = url; // 입력 URL이 현재 화면
		if (head == NULL) {
			node->data = url; 
			head = node;		
		} else {
			string data = url;
			pre = node;
			node = new Node;
			node->data = data;
			pre->link = node;
		}
		memory.push_back(node);
	}
	println("--- 히스토리 구성 완료 ---");
	printNodes(head);

	println("\n현재 URL--> " + currentURL);

	string arrow;
	while (true) {
		input(arrow, "방향키 < 또는 > : ");
		if (arrow == "x" || arrow == "X")
			break;
		if (arrow == "<") {
			string retURL = findPrevURL(currentURL);
			if (retURL == "") {
				println("첫 번째 URL 입니다.");
			}
			else {
				println(retURL + "로 이동했습니다.");
				currentURL = retURL;
			}
		}
		else if (arrow == ">") {
			string retURL = findNextURL(currentURL);
			if (retURL == "") {
				println("마지막 URL 입니다.");
			}
			else {
				println(retURL + "로 이동했습니다.");
				currentURL = retURL;
			}
		}
	}

	freeMemory();
}