#ifndef UMANAGER_H
#define UMANAGER_H

#include <string>
#include <winternl.h>
#include <Windows.h>
#include <mutex>
#include <thread>
#include <vector>

#include "..\client.h"

#include "process.h"

namespace usermode {
/*
 * The manager class is meant to abstract away the interaction between the Process
 * class and the threadpool class to allow a single thread (or multiple) to easily run
 * the core business logic of running tasks in a certain order.
 */
class UManager
{
        std::unique_ptr<Process>            process;
        std::shared_ptr<global::ThreadPool> thread_pool;

    public:
        UManager(std::shared_ptr<global::ThreadPool> ThreadPool,
                 std::shared_ptr<global::Client>     ReportInterface);
        ~UManager();

        void ValidateProcessThreads();
        void ValidateProcessMemory();
        void ValidateProcessModules();
};
}

#endif