/*
 * Author:          Patrick-Christopher Mattulat
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2020-08-20
 * Changed:         2020-11-26
 *
 * */

#ifndef LS_STD_LOGGER_HPP
#define LS_STD_LOGGER_HPP

#include <ls_std/base/Class.hpp>
#include "LogLevel.hpp"
#include <ls_std/io/IWriter.hpp>
#include <ls_std/io/File.hpp>
#include <ls_std/io/FileOutputStream.hpp>
#include <string>

namespace ls_std {
  class Logger : public Class {
    public:

      explicit Logger(const std::shared_ptr<ls_std::IWriter>& _writer);
      ~Logger() override = default;

      void debug(const ls_std::byte* _data);
      void error(const ls_std::byte* _data);
      void fatal(const ls_std::byte* _data);
      ls_std::LogLevel getLogLevel();
      void info(const ls_std::byte* _data);
      void setLogLevel(const ls_std::LogLevelValue& _logLevelValue);
      void trace(const ls_std::byte* _data);
      void warn(const ls_std::byte* _data);

    private:

      ls_std::LogLevel logLevel {};
      std::shared_ptr<ls_std::IWriter> writer {};

      void _log(const ls_std::byte* _data, const ls_std::LogLevel& _logLevel);
  };
}

#endif