#include <iostream>
#include <map>
#include <fstream>

using namespace std;

void add(map<string, string> numbers);
void show(map<string, string> numbers);
void clear(map<string, string> numbers); //cleat the txt file and the map also
void erase_number(map<string, string> numbers); //erase one number from the phonebook
int main(){
	map<string, string> numbers;
	ifstream file("phonebook.txt");
	string name, number;
	while(file >> name >> number)
		numbers[name] = number;
	file.close();


	repeat:

	int choise; //to know which option the user choose
	int repeat_or_exit;

    cout << "Welcom to phonebook 0.1" << endl << endl << endl;
    cout << "Make a choise:" << endl
    	 << "1- Show all numbers in the phonebook." << endl
	     << "2- Add new number to the phonebook." << endl
	     << "3- Remove a number from the phonebook." << endl
	     << "4- clear all the numbers in the phonebook." << endl;
    cin >> choise; //enter the number of the option that user choose
    switch(choise){
    case 1:
    	show(numbers);
    break;
    case 2:
    	add(numbers);

    break;
    case 3:
    	erase_number(numbers);
    break;
    case 4:
    	clear(numbers);
    break;
    default:
    	cout << "Error, please try again." << endl;
    }
    cout << "Exit (0) or repeat (1) ?" << endl;
    cin >> repeat_or_exit;
    if(repeat_or_exit == 0){
    	cout << "Program ended successfully!" << endl;
    	return 0;
    }
    else if(repeat_or_exit == 1){
    	goto repeat;
    }
}

void add(map<string, string> numbers){
	string name, number;
	cout << "Enter the name of your new contact:" << endl;
	cin >> name;
	cout << "Enter the number of your new contact" << endl;
	cin >> number;
	ofstream file("phonebook.txt", ios::app);
	file << name << " " << number << endl;
	numbers[name] = number;
	cout << "Operation completed successfully!" << endl;
	file.close();
}


void show(map<string, string> numbers){
	for(map<string, string>::iterator iter = numbers.begin(); iter != numbers.end(); iter++)
		cout << iter->first << " : " << iter->second << endl;
}

void clear(map<string, string> numbers){
	ofstream file("phonebook.txt");
	file << "";
	for(map<string, string>::iterator iter = numbers.begin(); iter != numbers.end(); iter++)
		numbers.erase(iter->first);
	cout << "All numbers in phonebook erased succesfully" << endl;
	file.close();
}

void erase_number(map<string, string> numbers){

	string to_erase; //to define which number to erase
	cout << "Enter the name that you want to remove from the phonebook:" << endl;
	cin >> to_erase;
	for(map<string, string>::iterator iter = numbers.begin(); iter != numbers.end(); iter++){
		if(iter->first == to_erase){
			numbers.erase(iter->first);
			break;
		}
	}
	ofstream file("phonebook.txt");
	for(map<string, string>::iterator oiter = numbers.begin(); oiter != numbers.end(); oiter++){
		file << oiter->first << " " << oiter->second << endl;
	}
}
