Website Summary Files Commits Branches @commit @diff @stats
path: root / src / VenueConsoleUI.cpp
blob: 6074902cc1a29382ef6cd2add3aab64d0eee9152 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include "VenueConsoleUI.h"
#include "String/String.h"
#include "Date/Date.h"
#include "EventSystem/StatusCodes.h"
#include "EventSystem/Reservation.h"
#include "EventSystem/EventSystem.h"
#include "ConsoleInterface/Menu.h"
#include "ConsoleInterface/Toolbox.hpp"

Venue* v;
Menu mainMenu("FMI Ticket System"), ticketManagementMenu("Ticket management"), eventManagementMenu("Event management"), reportsMenu("Report management");

void handleStatusCode(StatusCode sc, Menu menu) {
	switch (sc) {
		case Success:
			menu.registerSuccess("Success!"); break;
		case W_TicketHadNotBeenReserved:
			menu.registerWarning("Ticket hadn't been reserved. Nothing changed."); break;
		case E_EventDoesNotExist: 
			menu.registerError("Event doesn't exist!"); break;
		case E_TicketAlreadyBought:
			menu.registerError("Ticket was already bought!"); break;
		case E_TicketAlreadyReserved:
			menu.registerError("Ticket was already reserved!"); break;
		case E_ReservationDoesNotExist:
			menu.registerError("Reservation doesn't exist!"); break;
		case E_WrongReservationPassword:
			menu.registerError("Wrong reservation password!"); break;
		default: break;
	}
}

/* Ticket Management */

void command_freeSeats() {
	char name[MAX_LINE_WIDTH];
	inputLineBox("Enter event name: ", name, MAX_LINE_WIDTH);
	Date date;
	inputBox("Enter event date: ", &date);
	print("Number of free seats: ");
	// printLine(v->get_es().queryFreeSeats(name, date));
}

void command_reserveTicket() {
	char name[MAX_LINE_WIDTH];
	inputLineBox("Enter event name: ", name, MAX_LINE_WIDTH);
	Date date;
	inputBox("Enter event date: ", &date);
	char password[PASSWORD_LEN];
	inputBox("Enter password [Max 8 characters]: ", &password);
	char note[NOTE_LEN];
	inputBox("Enter note [Max 32 characters]: ", &note);
	Ticket tic;
	inputBox("Enter row and seat: ", &tic);

	handleStatusCode(v->get_es().reserveTicket(name, date, password, note, tic), ticketManagementMenu);
}

void command_cancelReservation() {
	char name[MAX_LINE_WIDTH];
	inputLineBox("Enter event name: ", name, MAX_LINE_WIDTH);
	Date date;
	inputBox("Enter event date: ", &date);
	Ticket tic;
	inputBox("Enter row and seat: ", &tic);

	handleStatusCode(v->get_es().cancelTicketReservation(name, date, tic), ticketManagementMenu);
}

void command_buyTicket() {
	bool reserved;
	inputBox("Is ticket reserved? [0/1]: ", &reserved);
	char name[MAX_LINE_WIDTH];
	inputLineBox("Enter event name: ", name, MAX_LINE_WIDTH);
	Date date;
	inputBox("Enter event date: ", &date);
	Ticket tic;
	inputBox("Enter row and seat: ", &tic);

	if (reserved) {
		char pass[PASSWORD_LEN];
		inputLineBox("Enter reservation password: ", pass, PASSWORD_LEN);
		std::cout << "Saved- " << pass << std::endl;
		handleStatusCode(v->get_es().buyTicket(name, date, tic, pass), ticketManagementMenu);
	}
	else
		handleStatusCode(v->get_es().buyTicket(name, date, tic), ticketManagementMenu);
}

void submenu_ticketManagement() {
	ticketManagementMenu.navigate();
}

/* Event Management */

void command_createEvent() {
	unsigned hallIndex;
	inputBox("Enter hall index: ", &hallIndex);
	if (!v->hallExists(hallIndex)) {
		eventManagementMenu.registerError("Invalid hall index!");
		return;
	}
	
	char name[MAX_LINE_WIDTH];
	inputLineBox("Enter event name: ", name, MAX_LINE_WIDTH);
	Date date;
	inputBox("Enter event date and time: ", &date);
	
	handleStatusCode(v->get_es().createEvent(&v->get_halls()[hallIndex], name, date), eventManagementMenu);
}


void submenu_eventManagement() {
	eventManagementMenu.navigate();
}

/* Report Management */

void submenu_reportManagement() {

}

/* Main */


void init() {
	mainMenu.addCommand(Command("Ticket Management", submenu_ticketManagement));
	mainMenu.addCommand(Command("Event Management", submenu_eventManagement));
	mainMenu.addCommand(Command("Report Management", submenu_reportManagement));

	ticketManagementMenu.addCommand(Command("Count of Free Seats", command_freeSeats));
	ticketManagementMenu.addCommand(Command("Reserve Ticket", command_reserveTicket));
	ticketManagementMenu.addCommand(Command("Cancel Ticket Reservation", command_cancelReservation));
	ticketManagementMenu.addCommand(Command("Buy Ticket", command_buyTicket));

	eventManagementMenu.addCommand(Command("Create Event", command_createEvent));
}

void runUI(Venue& venue) {
	v = &venue;
	init();
	mainMenu.navigate();
}