#pragma once #include #include #include #include namespace wowee { namespace tools { /** * Extraction pipeline: MPQ archives → loose files + manifest */ class Extractor { public: struct Options { std::string mpqDir; // Path to WoW Data directory std::string outputDir; // Output directory for extracted assets int threads = 0; // 0 = auto-detect bool verify = false; // CRC32 verify after extraction bool verbose = false; // Verbose logging }; struct Stats { std::atomic filesExtracted{0}; std::atomic bytesExtracted{0}; std::atomic filesSkipped{0}; std::atomic filesFailed{0}; }; /** * Run the extraction pipeline * @return true on success */ static bool run(const Options& opts); private: static bool enumerateFiles(const Options& opts, std::vector& outFiles); }; } // namespace tools } // namespace wowee