#pragma once

#include "core/HttpServer/IHttpServer.h"
#include "logger/logger.h"
#include "player/player.h"

#include <memory>
#include <sdi_toolBox/desktop/eventBus/bus.h>

//--------------------------------------------------------------
class AppContext
{
  public:
  AppContext();                                                   // Default constructor
  virtual ~AppContext()                            = default;     // Default destructor
  AppContext(const AppContext &obj)                = delete;      // Copy constructor
  AppContext(AppContext &&obj) noexcept            = delete;      // Move constructor
  AppContext &operator=(const AppContext &obj)     = delete;      // Copy assignment operator
  AppContext &operator=(AppContext &&obj) noexcept = delete;      // Move assignment operator

  sdi_toolBox::desktop::eventBus::Bus eventBus;     // Event bus for inter-component communication

  Logger                       logger;        // Logger instance
  std::unique_ptr<IHttpServer> m_hServer;     // HTTP server instance

  std::unique_ptr<player::Player> player;     // Player instance
};
//--------------------------------------------------------------
