/* File: Controller.h Description: Header file declaring the Controller class, which manages user authentication, inventory, services, bookings, job cards, invoices, and notifications in the system. Author: Trenser Date:19-May-2026 */ #pragma once #include #include #include "AuthenticationManagementService.h" #include "Enums.h" #include "InventoryManagementService.h" #include "Map.h" #include "PaymentManagementService.h" #include "ServiceManagementService.h" #include "UserManagementService.h" class Service; class ComboPackage; class InventoryItem; class ServiceBooking; class User; class JobCard; class Invoice; class Notification; class Controller { private: AuthenticationManagementService m_authenticationManagementService; UserManagementService m_userManagementService; ServiceManagementService m_serviceManagementService; InventoryManagementService m_inventoryManagementService; PaymentManagementService m_paymentManagementService; public: bool login(const std::string& username, const std::string& password); void logout(); void changePassword(const std::string& newPassword); void createCustomer(const std::string& username, const std::string& name, const std::string& password, const std::string& email, const std::string& phone); const User* getAuthenticatedUser(); void createTechnician(const std::string& username, const std::string& name, const std::string& password, const std::string& email, const std::string& phone); void updateUserDetails(const std::string& email, const std::string& phone); util::Map getServices(); util::Map getComboPackages(); void purchaseService(const util::Vector& serviceIDs, const std::string& vehicleNumber, const std::string& vehicleBrand, const std::string& vehicleModel); void purchaseComboPackage(const std::string& comboPackageID, const std::string& vehicleNumber, const std::string& vehicleBrand, const std::string& vehicleModel); util::Map getInventoryItems(); const InventoryItem* getInventoryItem(const std::string& inventoryItemID); void addInventoryItem(const std::string& partName, int quantity, double price); void addInventoryItemStock(const std::string& selectedItemId, int quantity); void removeInventoryItem(const std::string& inventoryItemID); util::Map getServiceBookings(); util::Map getServiceBookingsByUser(const std::string userID); util::Map getUsers(); util::Map getUsers(util::UserType userType); void createJobCard(const std::string& bookingID, const std::string& technicianID, const std::string& serviceID); void createService(const std::string& name, const util::Vector& inventoryItemIDs, double laborCost); void removeService(const std::string& serviceID); util::Map getJobCardsByUser(); void updateJobStatus(const std::string& jobID); void removeUser(const std::string& userID); void createComboPackage(const std::string& name, const util::Vector& serviceIDs, double discountPercentage); void removeComboPackage(const std::string& comboPackageID); util::Map getInvoicesByUser(); util::Map getAllInvoices(); void confirmPayment(const std::string& invoiceID); void completePayment(const std::string& invoiceID, util::PaymentMode paymentMode); util::Vector getNotifications(); void deleteNotification(const std::string& notificationID); void configureNotifications(bool paymentNotifications, bool serviceNotifications); bool initialize(); void shutdown(); void registerEvents(HANDLE accountDisabledEvent, HANDLE notificationAvailableEvent); };