#include <iostream>
#include <string>
#include <limits>

using namespace std;

const int TOTALUSER = 50;

//User struct already declared in membermenu.cpp
void initializedUser(User users[]) {
	User user;
	
	user.name = "James Bond";
	user.age = 12;
	user.mobileNo = "123";
	user.login = "bond";
	user.password = "007";
	users[0] = user;
	
	user.name = "John Wick";
	user.age = 32;
	user.mobileNo = "456";
	user.login = "wick";
	user.password = "111";
	users[1] = user;
	
	user.name = "Tony Stark";
	user.age = 22;
	user.mobileNo = "231";
	user.login = "stark";
	user.password = "222";
	users[2] = user;
}

void loginMenu()
{
	system("cls");

	cout<<"\n";
	cout<<"\t               ###############################          "<<endl;
	cout<<"\t            #####################################       "<<endl;
	cout<<"\t         ###########################################    "<<endl;
	cout<<"\t      ################################################# "<<endl;
	cout<<"\t        ##              WELCOME TO HBS             ##   "<<endl;
	cout<<"\t        ##   ===================================   ##   "<<endl;
	cout<<"\t        ##         1) REGISTER                     ##   "<<endl;
	cout<<"\t        ##         2) LOGIN                        ##   "<<endl;
	cout<<"\t        ##         3) EXIT                         ##   "<<endl;
	cout<<"\t        ##   ===================================   ##   "<<endl;
	cout<<"\t        #############################################   "<<endl;
	cout<<"\t      ################################################# "<<endl;
	cout<<endl;
}

void exitLoginMenu()
{
	system("cls");

	cout << "\n\n\n\n\n";
	cout << "\t\t\t  THANK YOU FOR USING HBS" << endl;
	cout << "\t\t\t       SEE YOU AGAIN" << endl;
	cout << "\n\n\n\n";

	exit(0);
}

User userRegistration()
{
	User user;

  	cout<<"\n\t\t\t     REGISTERATION FORM" << endl;
  	cout<<"\t\t\t----------------------------" << endl;
  
	cout << "\t\t\t Name: ";
  	cin >> user.name;
  	
  	cin.clear();
  	cin.ignore(numeric_limits<streamsize>::max(), '\n');
  	
  	cout << "\t\t\t Age: ";
  	cin >> user.age;
  	
  	cin.clear();
  	cin.ignore(numeric_limits<streamsize>::max(), '\n');
  
	cout << "\t\t\t Mobile No: ";
  	cin >> user.mobileNo;
  	
  	cin.clear();
  	cin.ignore(numeric_limits<streamsize>::max(), '\n');
  
	cout << "\t\t\t Login: ";
  	cin >> user.login;
  
  	cin.clear();
  	cin.ignore(numeric_limits<streamsize>::max(), '\n');
  	
	cout << "\t\t\t Password: ";
  	cin >> user.password;
  	
  	cin.clear();
  	cin.ignore(numeric_limits<streamsize>::max(), '\n');
  	
  	system("pause");
	system("cls");
	
	return user;
}

User userLogin(User users[], int totalUser, bool &loginSuccess) {
	User foundUser, user;
	string login, password;
	
  	cout<<"\n\t\t\t     LOGIN FORM" << endl;
  	cout<<"\t\t\t----------------------------" << endl;	
	
	cout << "\t\t\t Enter your login ID: ";
	cin >> login;
	
	cin.clear();
  	cin.ignore(numeric_limits<streamsize>::max(), '\n');
	
	cout << "\t\t\t Enter your password: ";
	cin >> password;
	
	cin.clear();
  	cin.ignore(numeric_limits<streamsize>::max(), '\n');
	
	for(int i=0; i<totalUser; i++) {
		user = users[i];		
		
		if ((user.login).compare(login) == 0 && (user.password).compare(password) == 0) {
			foundUser = user;
			loginSuccess = true;
			break;			
		}
	}
	
	return foundUser;
}

void chooseLoginMenu()
{
	User users[TOTALUSER];
	User user;
	
	initializedUser(users);	
	
	int choice;
	int totalUser = 3; //from initializedUser
	bool loginSuccess = false;	
	
	do
	{
		loginMenu();
		
		cout<<"\n\n";
		cout<<"\t\t\t      Enter your choice"<<endl;
		cout<<"\t\t\t             ";
		cin >> choice;
		
		cin.clear();
  		cin.ignore(numeric_limits<streamsize>::max(), '\n');
		
		system("cls");
		
		switch(choice)
		{
			case 1 : {
				
				User user = userRegistration();				
				users[totalUser] = user;
				totalUser++;
				
				cout<<"\n\t\t\t     PRINTING REGISTERED USERS\n\n";
				for(int i=0; i<totalUser; i++) {
					
					user = users[i];
					cout << "\t\t\t Login: " << user.login << endl;
					cout << "\t\t\t Password: " << user.password << endl;
					cout << endl;
				}
				
				system("pause");
				system("cls");
				
				break;
			}
			
			case 2 : {
				
				User user = userLogin(users, totalUser, loginSuccess);
				
				if (loginSuccess) {
					cout << endl;
					cout << "\t\t\t Login success!" << endl;
					cout << "\t\t\t Name: " << user.name << endl;
					
					system("pause");
					system("cls");
					
					chooseMemberMenu(user);	
									
				} else {
					cout << endl;
					cout << "\t\t\t Login failed! wrong login/password" << endl;
					system("pause");
					system("cls");
				}
				
				break;
			}
			
			case 3 : {
				exitLoginMenu();
				break;
			}
			
			default : {
				cout<<"\n\n\n";
				cout<<"\t\t\t       INVALID INPUT"<<endl;
				cout<<"\t\t\t    Please choose again"<<endl;
				cout<<endl<<endl;					  
				system("pause");
				system("cls");
			}
		}
		
	} while(choice != 3);
}

