#ifndef WHERIGO_COMPLETION_H #define WHERIGO_COMPLETION_H #include #include #include extern "C" { struct lua_State; } namespace wherigo { struct CompletionData { std::string cartridgeName; std::string cartridgeGUID; std::string playerName; std::string completionCode; time_t startTime; time_t endTime; int duration; // seconds struct TaskCompletion { std::string name; bool completed; time_t completionTime; }; std::vector tasks; struct ItemFound { std::string name; time_t foundTime; }; std::vector items; struct ZoneVisited { std::string name; time_t visitTime; }; std::vector zones; }; class WherigoCompletion { public: // Generate completion log from current Lua state static bool generateCompletionLog(lua_State* L, const std::string& filePath, const std::string& playerName = "Player"); // Extract completion data from Lua state static CompletionData extractCompletionData(lua_State* L, const std::string& playerName); // Generate .gwl XML file static bool writeGWLFile(const CompletionData& data, const std::string& filePath); // Generate completion code (hash/signature) static std::string generateCompletionCode(const CompletionData& data); private: static std::string escapeXML(const std::string& str); static std::string formatTime(time_t t); }; } // namespace wherigo #endif // WHERIGO_COMPLETION_H