// DragonX Wallet - ImGui Edition // Copyright 2024-2026 The Hush Developers // Released under the GPLv3 #pragma once #include #include namespace dragonx { namespace data { /** * @brief A single address book entry */ struct AddressBookEntry { std::string label; std::string address; std::string notes; AddressBookEntry() = default; AddressBookEntry(const std::string& l, const std::string& a, const std::string& n = "") : label(l), address(a), notes(n) {} }; /** * @brief Address book manager * * Stores labeled addresses for easy access when sending. */ class AddressBook { public: AddressBook(); ~AddressBook(); /** * @brief Load address book from disk * @return true if loaded successfully */ bool load(); /** * @brief Save address book to disk * @return true if saved successfully */ bool save(); /** * @brief Get default address book file path */ static std::string getDefaultPath(); /** * @brief Add a new entry * @param entry The entry to add * @return true if added (false if duplicate address) */ bool addEntry(const AddressBookEntry& entry); /** * @brief Update an existing entry * @param index Index of entry to update * @param entry New entry data * @return true if updated */ bool updateEntry(size_t index, const AddressBookEntry& entry); /** * @brief Remove an entry * @param index Index of entry to remove * @return true if removed */ bool removeEntry(size_t index); /** * @brief Find entry by address * @param address Address to search for * @return Index or -1 if not found */ int findByAddress(const std::string& address) const; /** * @brief Get all entries */ const std::vector& entries() const { return entries_; } /** * @brief Get entry count */ size_t size() const { return entries_.size(); } /** * @brief Check if empty */ bool empty() const { return entries_.empty(); } private: std::vector entries_; std::string file_path_; }; } // namespace data } // namespace dragonx