#pragma once

#include <memory>
#include <vector>
#include <string>
#include <filesystem>

class CommandLineArgs
{
public:
    CommandLineArgs();

    static std::unique_ptr<CommandLineArgs> Create();

    std::filesystem::path getLaunchPath();

    const std::vector<std::string> getArgs() const;

    std::vector<std::string> getUserArgs() const;

    static void initialize(CommandLineArgs* args);

    void process(int argc, char *argv[]);

    void process(const std::vector<std::string>& args);

    void recordLaunchPath();
private:
    std::vector<std::string> mArugments;
    std::filesystem::path mLaunchPath;
};

using CommandLineArgsUPtr = std::unique_ptr<CommandLineArgs>;
