#ifndef GCRYPTCLI_CONFIGURATION_H
#define GCRYPTCLI_CONFIGURATION_H

#include <string>

class Configuration {
  public:
    static enum class INPUT_FROM {
      STDIN,
      FILE,
      PARAMETER
    } inputFrom;

    static enum class OUTPUT_TO {
      STDOUT,
      FILE
    } outputTo;

    static enum class IOBASE_FORMAT {
      BASE_BYTES,
      BASE_2,
      BASE_8,
      BASE_10,
      BASE_16,
      BASE_64,
      BASE_UWU,
      BASE_UGH
    }
    formatIn,
    formatOut;

    static std::string inputFilename;
    static std::string outputFilename;

    static enum class MODULE {
      ENCRYPTION,
      DECRYPTION,
      HASH,
      GENERATE_KEY
    } activeModule;

    //! Will analyze the supplied cli parameters,
    //! and decide what the configuration will be.
    static void Parse();

  private:
    static void DecideInputFrom();
    static void DecideOutputTo();
    static void DecideCiphertextFormat();
    static void MapCiphertextFormatToIOBases();
    static void DecideModule();

    // This is just an intermediary value, used between methods
    static IOBASE_FORMAT ciphertextFormat;

    // No instanciation! >:(
    Configuration() {};
};

#endif

