// Copyright (c) 2012-2017 VideoStitch SAS
// Copyright (c) 2018 stitchEm

#include "statemanager.hpp"

#include "libvideostitch-base/logmanager.hpp"

#include <QCoreApplication>

StateManager::StateManager(QObject* parent) : QObject(parent), currentState(GUIStateCaps::idle) {}

StateManager* StateManager::getInstance() {
  StateManager* stateManager = qApp->findChild<StateManager*>();
  if (stateManager) {
    return stateManager;
  } else {
    return new StateManager(qApp);
  }
}

void StateManager::registerObject(QObject* qObj) {
  Q_ASSERT(qObj && (qObj != this));
  connect(this, SIGNAL(stateChanged(GUIStateCaps::State)), qObj, SLOT(changeState(GUIStateCaps::State)));
  connect(qObj, SIGNAL(reqChangeState(GUIStateCaps::State)), this, SLOT(changeState(GUIStateCaps::State)));
}

void StateManager::changeState(GUIStateCaps::State s) {
  if (s == currentState) {
    return;
  }

  QString message = QString("StateManager::changeState, state = %0").arg(s);
  if (sender()) {
    message += QString(", sender = %0").arg(sender()->metaObject()->className());
  }
  VideoStitch::Helper::LogManager::getInstance()->writeToLogFile(message);

  currentState = s;
  emit stateChanged(s);
}