/* File: User.h Description: Declares the User class which represents system users in the Vehicle Service Management System. Each user has a unique ID, credentials, personal details, notifications, role type, and status. The User class also implements the Observer interface to handle notifications. Author: Trenser Date: 19-May-2026 */ #pragma once #include #include "Map.h" #include "Observer.h" #include "Enums.h" class Notification; class User : public Observer { private: static int m_uid; std::string m_id; std::string m_userName; std::string m_password; std::string m_name; std::string m_phone; std::string m_email; util::Map m_notifications; util::UserType m_type; util::State m_status; public: User(); User(const std::string& userName, const std::string& password, const std::string& name, const std::string& phone, const std::string& email, util::UserType role); User(const std::string& userId, const std::string& userName, const std::string& password, const std::string& name, const std::string& phone, const std::string& email, util::UserType role, util::State status); ~User(); const std::string& getId() const; const std::string& getUserName() const; const std::string& getPassword() const; const std::string& getName() const; const std::string& getPhone() const; const std::string& getEmail() const; util::Map& getNotifications(); util::UserType getUserType() const; util::State getState() const; void setId(const std::string& id); void setUserName(const std::string& userName); void setPassword(const std::string& password); void setName(const std::string& name); void setPhone(const std::string& phone); void setEmail(const std::string& email); void addNotification(Notification* notification) override; void setRole(util::UserType role); void setState(util::State status); std::string serialize() const; static User* deserialize(const std::string&); static std::string getHeaders(); };