#include "Runtime/GuiSys/CGuiGroup.hpp"

namespace urde {

void CGuiGroup::LoadWidgetFnMap() {}

CGuiGroup::CGuiGroup(const CGuiWidgetParms& parms, int defaultWorker, bool b)
: CGuiCompoundWidget(parms), xbc_selectedWorker(defaultWorker), xc0_b(b) {}

void CGuiGroup::SelectWorkerWidget(int workerId, bool setActive, bool setVisible) {
  CGuiWidget* child = static_cast<CGuiWidget*>(GetChildObject());
  while (child) {
    if (child->GetWorkerId() == workerId) {
      CGuiWidget* sel = GetSelectedWidget();
      if (setActive) {
        sel->SetIsActive(false);
        child->SetIsActive(true);
      }
      if (setVisible) {
        sel->SetVisibility(false, ETraversalMode::Single);
        child->SetVisibility(true, ETraversalMode::Single);
      }
      break;
    }
    child = static_cast<CGuiWidget*>(child->GetNextSibling());
  }
}

CGuiWidget* CGuiGroup::GetSelectedWidget() { return GetWorkerWidget(xbc_selectedWorker); }

const CGuiWidget* CGuiGroup::GetSelectedWidget() const { return GetWorkerWidget(xbc_selectedWorker); }

bool CGuiGroup::AddWorkerWidget(CGuiWidget* worker) {
  ++xb8_workerCount;
  return true;
}

void CGuiGroup::OnActiveChange() {
  CGuiWidget* sel = GetSelectedWidget();
  if (sel)
    sel->SetIsActive(true);
}

std::shared_ptr<CGuiWidget> CGuiGroup::Create(CGuiFrame* frame, CInputStream& in, CSimplePool* sp) {
  CGuiWidgetParms parms = ReadWidgetHeader(frame, in);
  s16 defaultWorker = in.readInt16Big();
  bool b = in.readBool();
  std::shared_ptr<CGuiWidget> ret = std::make_shared<CGuiGroup>(parms, defaultWorker, b);
  ret->ParseBaseInfo(frame, in, parms);
  return ret;
}

} // namespace urde