Setting Up C++ Project with SystemLocker Authentication

Files Required:
- systemlocker.cpp
- systemlocker.hpp

Dependencies:
- cURL: Available at mikros\vendor\curl-x64 or download from curl.se (https://curl.se/download.html).
	- If the compiled .lib file doesn't work, try the alternate (libcurl_alt_cpp20.lib) file in the root folder.
- nlohmann/json: Available at mikros\vendor\json or download from GitHub (mikros\vendor\json or https://github.com/nlohmann/json/tree/develop/single_include/nlohmann).

Steps to Set Up in Visual Studio:

1. Create a New Project (skip this step if you have an existing project)
   - Open Visual Studio and create a new C++ Console Application project.

2. Add Source Files:
   - Copy `systemlocker.cpp` and `systemlocker.hpp` to the project's source folder.

3. Add Dependencies:
   - Right-click on the project in the Solution Explorer and select 'Properties'.
   - Under 'C/C++ > General', add the paths to the cURL and JSON includes in 'Additional Include Directories' e.g:
     - `mikros\vendor\curl-x64`
     - `mikros\vendor\json`
   - Under 'Linker' > 'General', add the path to the cURL library in 'Additional Library Directories' e.g:
     - `mikros\vendor\curl-x64\lib`
   - Under 'Linker' > 'Input', you can either:
     - Option 1: You can use the following `#pragma comment` directives in your code:
       
       ```cpp
       #pragma comment(lib, "Normaliz.lib")
       #pragma comment(lib, "Ws2_32.lib")
       #pragma comment(lib, "Crypt32.lib")
       #pragma comment(lib, "Wldap32.lib")
       #pragma comment(lib, "vendor/curl-x64/lib/libcurl_a.lib")
       ```
       This is already done inside systemlocker.hpp, so you will not have to do it yourself.

     - Option 2: Add the following libraries in 'Additional Dependencies':
       - `Normaliz.lib`
       - `Ws2_32.lib`
       - `Crypt32.lib`
       - `Wldap32.lib`
       - `libcurl_a.lib`

       If you go with option 2, make sure to delete the linking inside of systemlocker.hpp

4. Include Files in Your CPP File:
   You can create a `main.cpp` file with the following content to verify that it's working:

   ```cpp
   #include "src/systemlocker.hpp"
   #include <iostream>

   namespace {
       /// <summary>
       /// Prompts the user for their license key, initializes the system locker,
       /// and attempts to authenticate using the provided key. Outputs the 
       /// authentication status.
       /// </summary>
       void mock() {
           std::string userInput{};
           std::cout << "Please input your license key : ";
           std::cin >> userInput;

           bool shouldUseHwidLock{ true };
           std::string customHwid{ "custom" };

           SystemLocker::Initialize(shouldUseHwidLock, customHwid);
           auto const authenticated = SystemLocker::Authenticate(userInput);

           if (authenticated) {
               std::cout << "Authenticated successfully!\n";
           }
           else {
               std::cout << "Failed to authenticate!\n";
           }
       }

       void tests() {
           bool shouldUseHwidLock{ true };

           auto constexpr goodKey = "test-system-98GMMZXSLR";
           auto constexpr badKey = "test-system-jhefksgr";

           SystemLocker::test::RunAll(shouldUseHwidLock, goodKey, badKey);
       }
   } // unnamed namespace

   int main() {
       mock();
       std::cout << "\n\n\n";
       tests();
       std::cout << "\n\n\n";
       std::cin.get();
   }
